- 04/01/2019
- 6 Minuten zum Lesen
-
- S
- s
- c
Kurzbeschreibung
Beschreibt die Verwendung der Try
, Catch
und Finally
– Blöcke zu handleterminating Fehler.,
LANGE BESCHREIBUNG
Verwenden Sie Try
, Catch
und Finally
Blöcke, um auf terminatingerrors in Skripten zu reagieren oder diese zu behandeln. DieTrap
Anweisung kann auch verwendet werden, um terminatingerrors in Skripten zu behandeln. Weitere Informationen finden Sie unter about_Trap.
Ein Abschlussfehler stoppt die Ausführung einer Anweisung. Wenn PowerShell einen Abschlussfehler in irgendeiner Weise nicht behandelt, stoppt PowerShell auch die Ausführung der Funktion oder des Skripts mit der aktuellen Pipeline., In anderen Sprachen wie C#werden Abschlussfehler als Ausnahmen bezeichnet.
Verwenden Sie den Try
– Block, um einen Abschnitt eines Skripts zu definieren, in dem Sie wantPowerShell auf Fehler überwachen möchten. Wenn innerhalb des Blocks Try
ein Fehler auftritt,wird der Fehler zuerst in der automatischen Variablen $Error
gespeichert. PowerShell sucht dann nach einemCatch
– Block, um den Fehler zu behandeln., Wenn dieTry
– Anweisung keinen übereinstimmendenCatch
– Block hat, sucht PowerShell weiterhin nach einer geeignetenCatch
– Block oderTrap
– Anweisung in den übergeordneten Bereichen. Nach Abschluss einesCatch
– Blocks oder wenn kein geeigneter Catch
– Block oder Trap
– Anweisung gefunden wird, wird der Finally
– Block ausgeführt. Wenn der Fehler nicht behandelt werden kann,wird der Fehler in den Fehlerstrom geschrieben.,
EinCatch
– Block kann Befehle zum Verfolgen des Fehlers oder zum Wiederherstellen des erwarteten Ablaufs des Skripts enthalten. EinCatch
– Block kann angeben, welcher Fehler typesit abfängt. Try
– Anweisung kann mehrere Catch
– Blöcke für differentkinds von Fehlern.
EinFinally
– Block kann verwendet werden, um Ressourcen freizugeben, die von Ihrem Skript nicht mehr benötigt werden.,
Try
, Catch
, and Finally
resemble the Try
, Catch
, and Finally
keywords used in the C# programming language.
SYNTAX
A Try
statement contains a Try
block, zero or more Catch
blocks, and zeroor one Finally
block. A Try
statement must have at least one Catch
blockor one Finally
block.,
Im Folgenden wird die Try
Blocksyntax angezeigt:
try {<statement list>}
Auf das Schlüsselwort Try
folgt eine Anweisungsliste in geschweiften Klammern. Wenn während der Ausführung der Anweisungen in der Anweisungsliste ein terminatingerror auftritt, übergibt thescript das Fehlerobjekt vomTry
– Block an einen entsprechendenCatch
– Block.
Das Folgende zeigt dieCatch
Blocksyntax:
Fehlertypen werden in Klammern angezeigt., Die äußersten Klammern zeigen an, dass das Element isoptional ist.
Auf das Schlüsselwort Catch
folgt eine optionale Liste von Fehlertypbeschreibungen und eine Anweisungsliste. Wenn imTry
– Block ein Abschlussfehler auftritt, sucht PowerShell nach einem geeigneten Catch
– Block. Ifone gefunden wird, werden die Anweisungen in der Catch
– block ausgeführt werden.
DerCatch
– Block kann einen oder mehrere Fehlertypen angeben. Ein Fehlertyp ist aMicrosoft. NET Framework exception oder eine Ausnahme, die von a abgeleitet ist .,NETFramework Ausnahme. EinCatch
Block behandelt Fehler der angegebenen .NETFramework Ausnahmeklasse oder einer Klasse, die von der specifiedclass abgeleitet ist.
Wenn einCatch
– Block einen Fehlertyp angibt, behandelt derCatch
– Block diestyp des Fehlers. Wenn einCatch
– Block keinen Fehlertyp angibt, behandelt dieserCatch
– Block jeden Fehler, der imTry
– Block aufgetreten ist., EineTry
– Anweisung kann mehrereCatch
– Blöcke für die verschiedenen angegebenen Fehlertypen enthalten.
Das Folgende zeigt die Finally
Blocksyntax:
finally {<statement list>}
Auf das Finally
Schlüsselwort folgt eine Anweisungsliste, die jedes Mal ausgeführt wird, wenn das Skript ausgeführt wird, auch wenn die Try
Anweisung ohne Fehler lief oder ein Fehler in einem Catch
Anweisung.
Beachten Sie, dass das Drücken von STRG+C die Pipeline stoppt., Objekte, die an die Pipeline gesendet werden, werden nicht als Ausgabe angezeigt. Wenn Sie also eine Anweisung einfügen, die angezeigt werden soll, z. B. „Finally block has run“, wird sie nicht angezeigt, nachdem Sie STRG+C gedrückt haben, selbst wenn derFinally
– Block ausgeführt wurde.
FEHLER ABFANGEN
Das folgende Beispielskript zeigt einen Try
Block mit einer Catch
Block:
try { NonsenseString }catch { "An error occurred." }
Das Catch
Schlüsselwort muss sofort dem Try
Block folgen oder ein anderer Catch
Block.,
PowerShell erkennt „NonsenseString“ nicht als Cmdlet oder anderes Element.Wenn Sie dieses Skript ausführen, wird das folgende Ergebnis zurückgegeben:
An error occurred.
Wenn das Skript auf“ NonsenseString “ stößt, wird ein Abschlussfehler verursacht. DerCatch
– Block behandelt den Fehler, indem er die Anweisungsliste innerhalb des Blocks ausführt.
MIT MEHREREN CATCH-ANWEISUNGEN
A Try
Anweisung kann eine beliebige Anzahl von Catch
Blöcke., Zum Beispiel hat das folgende Skript einen Try
Block, der MyDoc.doc
herunterlädt, und es enthältzwei Catch
Blöcke:
Der erste Catch
Block behandelt Fehler der System.Net.WebException undSystem.IO.IOException Typen. Der zweiteCatch
– Block gibt keinen Anerror-Typ an. Der zweiteCatch
– Block behandelt alle anderen auftretenden Abschlussfehler.
PowerShell entspricht Fehlertypen durch Vererbung. Catch
– block behandelt errorsof der angegebenen .,NET Framework exception class oder einer Klasse, die abgeleitetvon der angegebenen Klasse. Das folgende Beispiel enthält einenCatch
– Block, der den Fehler „Befehl nicht gefunden“ erfasst:
catch {"Inherited Exception" }
Der angegebene Fehlertyp CommandNotFoundException erbt von theSystem.SystemException geben. Das folgende Beispiel fängt auch einen CommandNot Found error:
catch {"Base Exception" }
Dieser Catch
Block behandelt den Fehler“ Command Not Found “ und andere Fehler, die vom SystemException-Typ stammen.,
Wenn Sie eine Fehlerklasse und eine ihrer abgeleiteten Klassen angeben, platzieren Sie denCatch
– Block für die abgeleitete Klasse vor demCatch
– Block für die allgemeine Klasse.
Verwenden von Traps in einem Try Catch
Wenn ein Abschlussfehler in einem Try
– Block mit einem Trap
auftritt, der im Try
– Block definiert ist, auch wenn es einen übereinstimmenden Catch
– Block gibt, der Trap
statementtakes Steuerung.,
Wenn eine Trap
an einem höheren Block als der Try
vorhanden ist und kein übereinstimmenderCatch
Block innerhalb des aktuellen Bereichs vorhanden ist, übernimmt die Trap
die Kontrolle, auch wenn der übergeordnete Bereich eine übereinstimmende Catch
div > blockieren.
ZUGRIFF AUF AUSNAHMEINFORMATIONEN
Innerhalb einesCatch
– Blocks kann auf den aktuellen Fehler mit$_
zugegriffen werden, der auch als$PSItem
. Das Objekt ist vom Typ ErrorRecord.,
try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_}
Wenn Sie dieses Skript ausführen, wird das folgende Ergebnis zurückgegeben:
An Error occurred:The term 'NonsenseString' is not recognized as the name of a cmdlet, function,script file, or operable program. Check the spelling of the name, or if a pathwas included, verify that the path is correct and try again.
Es gibt zusätzliche Eigenschaften,auf die zugegriffen werden kann, z. B. ScriptStackTrace, Exception und ErrorDetails. Wenn wir beispielsweise das Skript in Folgendes ändern:
try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_.ScriptStackTrace}
Das Ergebnis ähnelt:
An Error occurred:at <ScriptBlock>, <No file>: line 2
RESSOURCEN FREIGEBEN, INDEM SIE FINALLY
VERWENDEN, um von einem Skript verwendete Ressourcen freizugeben, fügen Sie einen Finally
Block nach dem Try
undCatch
Blöcke., Die Blockanweisungen Finally
werden unabhängig davon ausgeführt, ob im BlockTry
ein Abschlussfehler auftritt. PowerShell führt denFinally
– Block aus, bevor das Skript beendet wird oder bevor der aktuelle Block den Gültigkeitsbereich verlässt.
A Finally
Block läuft auch wenn Sie STRG+C verwenden, um thescript zu stoppen. EinFinally
– Block wird auch ausgeführt, wenn ein Exit-Schlüsselwort das Skript in einemCatch
– Block stoppt.,
SIEHE AUCH
about_Break
about_Continue
about_Scopes
about_Throw
about_Trap
Schreibe einen Kommentar