Wie man eine neue Ausnahme in PowerShell erstellt und wirft.
- Erstellen einer benutzerdefinierten Ausnahmeklasse
-
Verwenden Sie die
throw
-Anweisung, um eine benutzerdefinierte Ausnahme auszulösen - Umgang mit benutzerdefinierten Ausnahmen
- Fazit

Ausnahmebehandlung ist ein kritischer Aspekt beim Schreiben robuster und zuverlässiger PowerShell-Skripte. Durch das Erstellen und Auslösen von Ausnahmen können Sie effektiv Fehler und Probleme kommunizieren, die während der Skriptausführung auftreten können.
Während PowerShell mehrere integrierte Ausnahmetypen bietet, gibt es Szenarien, in denen Sie Ihre benutzerdefinierte Ausnahme erstellen und auslösen müssen, um die Fehlerbehandlung an die spezifischen Anforderungen Ihres Skripts anzupassen.
In diesem Artikel werden wir den Prozess des Erstellens und Auslösens benutzerdefinierter Ausnahmen in PowerShell untersuchen und ein detailliertes Beispiel sowie die Ausgabe bereitstellen.
Erstellen einer benutzerdefinierten Ausnahmeklasse
Bevor wir in benutzerdefinierte Ausnahmen eintauchen, lassen Sie uns kurz das Konzept von Ausnahmen in der Programmierung überprüfen.
Eine Ausnahme ist ein unerwartetes Ereignis oder ein Fehler, der den normalen Ablauf eines Programms unterbricht. Wenn eine Ausnahme auftritt, wird die Kontrolle an einen festgelegten Ausnahmebehandlungs-Codeblock übertragen, um ein sanftes Fehlermanagement zu ermöglichen.
PowerShell bietet eine Vielzahl von integrierten Ausnahmetypen, wie System.Management.Automation.CmdletInvocationException
, System.IO.IOException
und System.Exception
, um häufige Fehler zu behandeln. Allerdings ist das Erstellen benutzerdefinierter Ausnahmen vorteilhaft, wenn Sie spezifische Fehlerfälle haben oder klare und informative Fehlermeldungen an Benutzer bereitstellen möchten.
Um eine benutzerdefinierte Ausnahme in PowerShell zu erstellen, beginnen Sie damit, eine neue Ausnahmeklasse zu definieren, die von der Basis-Klasse [System.Exception]
erbt. Sie können dann Eigenschaften und Methoden hinzufügen, um das Verhalten Ihrer Ausnahme anzupassen.
Lassen Sie uns dies mit einem praktischen Beispiel veranschaulichen:
class MyCustomException : [System.Exception] {
MyCustomException() {
}
MyCustomException([string] $message) {
$this.Message = $message
}
[string] GetMessage() {
return "Custom Exception: $($this.Message)"
}
}
In diesem Beispiel erstellen wir eine benutzerdefinierte Ausnahmeklasse namens MyCustomException
. Die Klasse MyCustomException
erbt von der Basis-Klasse [System.Exception]
.
Dann werden zwei Konstruktoren definiert: ein Standardkonstruktor ohne Argumente und ein anderer Konstruktor, der eine benutzerdefinierte Fehlermeldung akzeptiert.
Schließlich fügen wir eine Methode GetMessage
hinzu, um eine formatierte Fehlermeldung zurückzugeben. Diese Methode kann nützlich sein, um spezifische Details beim Umgang mit der Ausnahme bereitzustellen.
Verwenden Sie die throw
-Anweisung, um eine benutzerdefinierte Ausnahme auszulösen
Sobald Sie Ihre benutzerdefinierte Ausnahmeklasse definiert haben, können Sie sie innerhalb Ihres Skripts mit der throw
-Anweisung auslösen. Um dies zu tun, erstellen Sie eine Instanz Ihrer benutzerdefinierten Ausnahme und übergeben Sie die relevante Fehlermeldung.
Hier ist ein Beispiel, das demonstriert, wie man eine benutzerdefinierte Ausnahme auslöst:
try {
# Simulate code that may cause an error
$result = 1 / 0
}
catch {
$errorMessage = "An error occurred: $($_.Exception.Message)"
throw [MyCustomException]::new($errorMessage)
}
Innerhalb eines try
-Blocks erzeugen wir absichtlich einen Fehler, indem wir versuchen, durch Null zu teilen.
Im catch
-Block erfassen wir den Fehler, erstellen eine benutzerdefinierte Fehlermeldung und werfen dann eine Instanz von MyCustomException
, die diese Fehlermeldung enthält.
Umgang mit benutzerdefinierten Ausnahmen
Der Umgang mit benutzerdefinierten Ausnahmen ist ähnlich wie der Umgang mit integrierten Ausnahmen in PowerShell. Sie können try
-, catch
- und finally
-Blöcke verwenden, um Fehler elegant zu verwalten.
Hier ist ein Beispiel, das das Erfassen und Behandeln einer benutzerdefinierten Ausnahme demonstriert:
try {
# Simulate code that may cause an error
$result = 1 / 0
}
catch [MyCustomException] {
Write-Host "Custom Exception Caught: $($_.Exception.Message)"
}
catch {
Write-Host "Other Exception Caught: $($_.Exception.Message)"
}
In diesem Code versuchen wir, innerhalb des try
-Blocks durch Null zu teilen. Der erste catch
-Block erfasst speziell die MyCustomException
und zeigt eine Nachricht an, die besagt, dass eine benutzerdefinierte Ausnahme erfasst wurde, zusammen mit der benutzerdefinierten Fehlermeldung, die wir bereitgestellt haben.
Wenn eine andere Ausnahme auftritt, fängt der zweite catch
-Block, der als generischer Ausnahme-Handler dient, sie ab und zeigt eine andere Nachricht an.
Lassen Sie uns das Skript ausführen und die Ausgabe sehen:
Custom Exception Caught: An error occurred: Attempted to divide by zero.
In diesem Beispiel greifen wir absichtlich einen Fehler, indem wir innerhalb des try
-Blocks versuchen, durch Null zu teilen. Der catch
-Block für die Klasse MyCustomException
erfasst den Fehler und zeigt eine Nachricht an, die besagt: Benutzerdefinierte Ausnahme erfasst
.
Zusätzlich bietet er die benutzerdefinierte Fehlermeldung: Ein Fehler ist aufgetreten: Versuch, durch Null zu teilen
. Wenn andere Ausnahmen aufgetreten wären, würden sie durch den generischen catch
-Block erfasst, was in diesem Beispiel jedoch nicht zutrifft.
Hier ist der vollständige funktionierende PowerShell-Code zum Erstellen und Auslösen einer benutzerdefinierten Ausnahme sowie ein Beispiel, wie man damit umgeht:
class MyCustomException : [System.Exception] {
MyCustomException() {
}
MyCustomException([string] $message) {
$this.Message = $message
}
[string] GetMessage() {
return "Custom Exception: $($this.Message)"
}
}
try {
# Simulate code that may cause an error (division by zero)
$result = 1 / 0
}
catch {
$errorMessage = "An error occurred: $($_.Exception.Message)"
throw [MyCustomException]::new($errorMessage)
}
try {
# Simulate code that may cause another error (e.g., accessing a non-existent variable)
$nonExistentVariable = $undefinedVariable
}
catch [MyCustomException] {
Write-Host "Custom Exception Caught: $($_.Exception.Message)"
}
catch {
Write-Host "Other Exception Caught: $($_.Exception.Message)"
}
Dieser Code gibt das Ergebnis der Ausnahmebehandlung aus und unterscheidet zwischen der benutzerdefinierten Ausnahme und anderen Ausnahmen.
Fazit
Das Erstellen und Auslösen benutzerdefinierter Ausnahmen in PowerShell ermöglicht es Ihnen, informativere Fehlermeldungen bereitzustellen und die Zuverlässigkeit sowie Wartbarkeit Ihrer Skripte zu verbessern. Diese benutzerdefinierten Ausnahmen helfen Ihnen, die Fehlerbehandlung an die spezifischen Anforderungen Ihres Skripts anzupassen, um ein reibungsloseres Benutzererlebnis und verbesserte Fehlersuche zu gewährleisten.