• 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 Finallykeywords 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 CatchBlock.,

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