THEMA
    about_Try_Catch_Finally

KURZBESCHREIBUNG
    Beschreibt die Verwendung von Try-, Catch- und Finally-Blöcken 
    zum Behandeln von Fehlern mit Abbruch.


DETAILBESCHREIBUNG
    Mit Try-, Catch- und Finally-Blöcken können Sie auf Fehler mit 
    Abbruch in Skripts reagieren oder diese behandeln. Die 
    Trap-Anweisung kann ebenfalls verwendet werden, um Fehler mit 
    Abbruch in Skripts zu behandeln. Weitere Informationen finden Sie 
    unter "about_Trap".


    Bei einem Fehler mit Abbruch wird die Ausführung einer Anweisung 
    verhindert. Wenn in Windows PowerShell ein Fehler mit Abbruch nicht 
    behandelt wird, wird auch die Funktion oder das Skript in der 
    aktuellen Pipeline nicht mehr ausgeführt. In anderen Programmiersprach
    en, z. B. C#, werden Fehler mit Abbruch als Ausnahmen bezeichnet. 
    Weitere Informationen zu Fehlern finden Sie unter "about_Errors".


    Definieren Sie mit dem Try-Block einen Abschnitt eines Skripts, in dem 
    Windows PowerShell Fehler überwachen soll. Wenn im Try-Blocks ein Fehler 
    auftritt, wird der Fehler zunächst in der automatischen Variablen 
    "$Error"gespeichert. Windows PowerShell sucht dann nach einem 
    Catch-Block, um den Fehler zu behandeln. Wenn die Try-Anweisung über 
    keinen entsprechenden Catch-Block verfügt, sucht Windows PowerShell 
    in den übergeordneten Bereichen nach einem geeigneten Catch-Block oder 
    einer Trap-Anweisung. Wenn ein Catch-Block abgeschlossen wurde bzw. 
    kein entsprechender Catch-Block oder keine entsprechende Trap-Anweisung 
    gefunden wurde, wird der Finally-Block ausgeführt. Wenn der Fehler 
    nicht behandelt werden kann, wird der Fehler in den Fehlerstream 
    geschrieben.


    Ein Catch-Block kann Befehle zum Nachverfolgen des Fehlers oder zum 
    Wiederherstellen des erwarteten Skriptflusses enthalten. In einem 
    Catch-Block kann angegeben sein, welche Fehlertypen abgefangen 
    werden. Eine Try-Anweisung kann mehrere Catch-Blöcke für 
    unterschiedliche Arten von Fehlern enthalten.


    Mit einem Finally-Block können beliebige Ressourcen freigegeben 
    werden, die vom Skript nicht mehr benötigt werden. 


    Try, Catch und Finally ähneln den Schlüsselwörtern Try, Catch und 
    Finally, die in der Programmiersprache C# verwendet werden.


  Syntax
      Eine Try-Anweisung enthält einen Try-Block, 0 oder mehr 
      Catch-Blöcke und 0 oder einen Finally-Block. Eine Try-Anweisung 
      muss mindestens einen Catch-Block oder einen Finally-Block 
      enthalten.


      Im Folgenden finden Sie die Syntax für Try-Blöcke:

          try {<Anweisungsliste>}


      Dem Try-Schlüsselwort folgt eine Anweisungsliste in 
      geschweiften Klammern. Bei einem Fehler mit Abbruch während der 
      Ausführung der Anweisungen in der Anweisungsliste übergibt das 
      Skript das Fehlerobjekt vom Try-Block an einen entsprechenden 
      Catch-Block. 


      Im Folgenden finden Sie die Syntax für Catch-Blöcke: 

          catch [[<Fehlertyp>][]] {<Anweisungsliste>}


      Fehlertypen werden in Klammern angezeigt. Die äußersten 
      Klammern kennzeichnen optionale Elemente.


      Dem Catch-Schlüsselwort folgen eine optionale Liste von 
      Fehlertypspezifikationen und eine Anweisungsliste. Bei einem Fehler 
      mit Abbruch im Try-Block sucht Windows PowerShell nach einem 
      entsprechenden Catch-Block. Wenn ein Catch-Block gefunden wird, 
      werden die darin enthaltenen Anweisungen ausgeführt.


      Im Catch-Block können ein oder mehrere Fehlertypen angegeben 
      werden. Ein Fehlertyp ist eine Microsoft .NET Framework-Ausnahme 
      oder eine Ausnahme, die von einer .NET Framework-Ausnahme 
      abgeleitet wird. In einem Catch-Block werden Fehler der 
      angegebenen .NET Framework-Ausnahmeklasse oder einer 
      beliebigen Klasse behandelt, die von der angegebenen Klasse 
      abgeleitet wird.


      Wenn in einem Catch-Block ein Fehlertyp angegeben wird, 
      behandelt dieser Catch-Block diesen Fehlertyp. Wenn in einem 
      Catch-Block kein Fehlertyp angegeben wird, behandelt dieser 
      Catch-Block jeden im Try-Block aufgetretenen Fehler. Eine 
      Try-Anweisung kann mehrere Catch-Blöcke für die anderen angegebenen 
      Fehlertypen enthalten. 


      Im Folgenden finden Sie die Syntax für Finally-Blöcke:

          finally {<Anweisungsliste>}


      Dem Finally-Schlüsselwort folgt eine Anweisungsliste, die bei jeder 
      Skriptausführung ausgeführt wird, auch wenn die Try-Anweisung ohne Fehler 
      ausgeführt oder in einer catch-Anweisung ein Fehler abgefangen wurde. 


      Wenn Sie STRG+C drücken, wird die Pipeline beendet. An die Pipeline 
      gesendete Objekte werden nicht als Ausgabe angezeigt. Wenn Sie eine 
      anzuzeigende Anweisung einschließen, z. B. "Finally-Block wurde 
      ausgeführt", wird diese daher nicht angezeigt, wenn Sie STRG+C 
      gedrückt haben. Dies gilt auch dann, wenn der Finally-Block 
      ausgeführt wurde.


  Abfangen von Fehlern
      Das folgende Beispielskript zeigt einen Try-Block mit einem 
      Catch-Block:

          try { NonsenseString }
          catch { "Fehler." }


      Das Catch-Schlüsselwort muss dem Try-Block oder einem anderen 
      Catch-Block unmittelbar folgen. 


      Windows PowerShell erkennt "NonsenseString" nicht als Cmdlet 
      oder anderes Element. Dieses Skript gibt folgendes Ergebnis zurück:

          Fehler.


      Wenn das Skript "NonsenseString" findet, wird ein Fehler mit Abbruch 
      verursacht. Der Catch-Block behandelt den Fehler durch Ausführen der 
      Anweisungsliste im Block.


  Verwenden mehrerer catch-Anweisungen
      Eine Try-Anweisung kann einer beliebige Anzahl von 
      Catch-Blöcken enthalten. Das folgende Skript enthält 
      beispielsweise einen Try-Block, mit dem "MeineDatei.doc" 
      heruntergeladen wird, sowie zwei Catch-Blöcke:

          try
          {
             $wc = new-object System.Net.WebClient 
             $wc.DownloadFile("http://www.contoso.com/MeineDatei.doc") 
          }
          catch [System.Net.WebException],[System.IO.IOException] 
          {
              "'MeineDatei.doc' kann nicht von 'http://www.contoso.com' 
              heruntergeladen werden." 
}
          catch
          {
              "Ein Fehler ist aufgetreten, der nicht aufgelöst werden konnte".
}


      Der erste Catch-Block behandelt Fehler des System.Net.WebException-
      Typs und des System.IO.IOException-Typs. Der zweite 
      Catch-Block gibt keinen Fehlertyp an. Der zweite Catch-Block 
      behandelt alle anderen aufgetretenen Fehler mit Abbruch.


      Windows PowerShell vergleicht Fehlertypen durch Vererbung. In 
      einem Catch-Block werden Fehler der angegebenen .NET Framework-
      Ausnahmeklasse oder einer beliebigen Klasse behandelt, die von der 
      angegebenen Klasse abgeleitet wird. Das folgende Beispiel enthält 
      einen Catch-Block, mit dem der Fehler "Befehl nicht gefunden" 
      abgefangen wird:

          catch [System.Management.Automation.CommandNotFoundException] 
              {"Geerbte Ausnahme" }


      Der angegebene Fehlertyp, CommandNotFoundException, erbt vom 
      System.SystemException-Typ. Im folgenden Beispiel wird auch der 
      Fehler "Befehl nicht gefunden" abgefangen:

          catch [System.SystemException] {"Einfache Ausnahme" }


      Dieser Catch-Block behandelt den Fehler "Befehl nicht gefunden" 
      sowie andere Fehler, die vom SystemException-Typ geerbt werden.


      Wenn Sie eine Fehlerklasse und eine von deren abgeleiteten 
      Klassen angeben, platzieren Sie den Catch-Block für die 
      abgeleitete Klasse vor dem Catch-Block für die allgemeine Klasse.


  Freigeben von Ressourcen mit Finally
      Um von einem Skript verwendete Ressourcen freizugeben, fügen 
      Sie nach dem Try-Block und den Catch-Blöcken einen 
      Finally-Block hinzu. Die Anweisungen des Finally-Blocks werden 
      unabhängig davon ausgeführt, ob im Try-Block ein Fehler mit Abbruch 
      auftritt. Windows PowerShell führt den Finally-Block aus, bevor das 
      Skript beendet wird oder der aktuelle Block den Bereich verlässt. 


      Ein Finally-Block wird auch dann ausgeführt, wenn Sie das Skript mit 
      STRG+C beenden. Ein Finally-Block wird auch dann ausgeführt, wenn das 
      Skript durch ein Exit-Schlüsselwort in einem Catch-Block beendet wird.


SIEHE AUCH
    about_Errors
    about_Trap




Inhaltsverzeichnis