Freigeben über


about_Trap

THEMA
    about_Trap

KURZBESCHREIBUNG
    Beschreibt ein Schlüsselwort, das einen Fehler mit Abbruch behandelt.


DETAILBESCHREIBUNG
    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 
    Programmiersprachen, z. B. C#, werden Fehler mit Abbruch als 
    Ausnahmen bezeichnet.


    Das Trap-Schlüsselwort gibt eine Liste von Anweisungen an,  
    die bei einem Fehler mit Abbruch ausgeführt werden. Mit 
    Trap-Anweisungen werden Fehler mit Abbruch behandelt. Sie 
    ermöglichen die fortgesetzte Ausführung des Skripts oder 
    der Funktion.


  Syntax

      Für Trap-Anweisungen wird die folgende Syntax verwendet:

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


      Die Trap-Anweisung enthält eine Liste von Anweisungen, die bei 
      einem Fehler mit Abbruch ausgeführt werden. Das Trap-Schlüssel-
      wort kann optional einen Fehlertyp angeben. Für einen Fehlertyp 
      sind Klammern erforderlich. 


      Ein Skript oder ein Befehl kann mehrere Trap-Anweisungen 
      aufweisen. Trap-Anweisungen können an jeder Stelle im Skript 
      oder Befehl enthalten sein. 


  Abfangen aller Fehler mit Abbruch

      Bei einem Fehler mit Abbruch, der nicht auf andere Weise in 
      einem Skript oder einem Befehl behandelt wird, überprüft 
      Windows PowerShell das Vorhandensein einer Trap-Anweisung für 
      die Fehlerbehandlung. Wenn eine Trap-Anweisung vorhanden ist, 
      führt Windows PowerShell das Skript oder den Befehl in der 
      Trap-Anweisung weiterhin aus.
 

      Das folgende Beispiel stellt eine sehr einfache Trap-Anweisung dar:

          trap {"Fehler gefunden."}


      Diese Trap-Anweisung fängt jeden Fehler mit Abbruch auf. Das 
      folgende Beispiel zeigt eine Funktion, die diese Trap-Anweisung 
      enthält:

          function TrapTest {
              trap {"Fehler gefunden."}
              nonsenseString
              }


      Diese Funktion enthält eine unsinnige Zeichenfolge, die zu 
      einem Fehler führt. Wenn diese Funktion ausgeführt wird, gibt 
      sie Folgendes zurück:

          C:\PS> TrapTest
          Fehler gefunden.


      Das folgende Beispiel enthält eine Trap-Anweisung, mit der der 
      Fehler in der automatischen Variablen "$_" angezeigt wird:

          function TrapTest {
              trap {"Fehler gefunden: $_"}
              nonsenseString
              }


      Wenn Sie diese Version der Funktion ausführen, gibt sie 
      Folgendes zurück:

          C:\PS> TrapTest
          Fehler gefunden: Der Begriff 'nonsenseString' wird nicht 
          als Name eines Cmdlet, einer Funktion, einer Skriptdatei 
          oder eines ausführbaren Programms erkannt. Überprüfen Sie 
          die Schreibung des Namens, oder, wenn ein Pfad 
          eingeschlossen ist, überprüfen Sie die Richtigkeit des 
          Pfads, und wiederholen Sie dann den Vorgang. 


      Trap-Anweisungen können auch komplexer sein. Trap-Anweisungen 
      können mehrere Bedingungen oder Funktionsaufrufe einschließen. 
      Andere Programme können damit protokolliert, getestet und sogar 
      ausgeführt werden.


   Abfangen angegebener Fehler mit Abbruch

      Das folgende Beispiel zeigt eine Trap-Anweisung, mit der der 
      CommandNotFoundException-Fehlertyp abgefangen wird:

          trap [System.Management.Automation.CommandNotFoundException]
              {"Fehler im Befehl abgefangen"}


      Wenn eine Funktion oder ein Skript eine Zeichenfolge findet, 
      die mit keinem bekannten Befehl übereinstimmt, zeigt diese 
      Trap-Anweisung die Zeichenfolge "Fehler im Befehl abgefangen". 
      Wenn Anweisungen in der Trap-Anweisungsliste ausgeführt wurden, 
      wird von Windows PowerShell das Fehlerobjekt in den 
      Fehlerstream geschrieben und das Skript dann fortgesetzt.


      Windows PowerShell verwendet die Microsoft .NET Framework-Aus-
      nahmetypen. Im folgenden Beispiel wird der Fehlertyp 
      System.Exception angegeben:

          trap [System.Exception] {"Fehler abgefangen"}


      Der CommandNotFoundException-Fehlertyp erbt vom Typ 
      "System.Exception". Von der Anweisung wird ein von einem 
      unbekannten Befehl erstellter Fehler abgefangen. Auch andere 
      Fehlertypen werden abgefangen.


      Sie können mehrere Trap-Anweisungen in einem Skript haben. 
      Jeder Fehler kann von nur einer Trap-Anweisung abgefangen 
      werden. Wenn bei einem Fehler mehrere Trap-Anweisungen 
      verfügbar sind, verwendet Windows PowerShell die Trap-Anweisung 
      mit dem spezifischsten Fehlertyp, der mit dem Fehler übereinstimmt. 


      Das folgende Skriptbeispiel enthält einen Fehler. Das Skript 
      enthält eine allgemeine Trap-Anweisung, mit der jeder Fehler 
      mit Abbruch abgefangen wird, sowie eine spezifische 
      Trap-Anweisung, mit der der CommandNotFoundException-Typ 
      angegeben wird.

          trap {"Anderen Fehler mit Abbruch abgefangen" } trap 
          [System.Management.Automation.CommandNotFoundException] {"Fehler im Befehl abgefangen"} 
          nonsenseString


      Dieses Skript führt zum folgenden Ergebnis:

          Fehler im Befehl abgefangen
          Der Begriff 'nonsenseString' wird nicht als Name eines 
          Cmdlet, einer Funktion, einer Skriptdatei oder eines 
          ausführbaren Programms erkannt. Überprüfen Sie die 
          Schreibung des Namens, oder, wenn ein Pfad eingeschlossen 
          ist, überprüfen Sie die Richtigkeit des Pfads, und 
          wiederholen Sie dann den Vorgang.
          At C:\PS>testScript1.ps1:3 char:19
          +   nonsenseString <<<< 


      Da Windows PowerShell "nonsenseString" nicht als Cmdlet oder 
      anderes Element erkennt, wird ein CommandNotFoundException-
      Fehler zurückgegeben. Dieser Fehler mit Abbruch wird von der 
      spezifischen Trap-Anweisung abgefangen.


      Das folgende Skriptbeispiel enthält die gleichen Trap-
      Anweisungen mit einem anderen Fehler:

          trap {"Anderen Fehler mit Abbruch abgefangen" } 
          trap [System.Management.Automation.CommandNotFoundException] 
              {"Fehler im Befehl abgefangen"}
          1/$null


      Dieses Skript führt zum folgenden Ergebnis:

          Anderen Fehler mit Abbruch abgefangen
          Versucht, durch 0 zu dividieren.
          At C:PS> errorX.ps1:3 char:7
          +   1/ <<<< $null


      Beim Versuch, durch 0 zu dividieren, wird kein CommandNotFound
      Exception-Fehler ausgegeben. Stattdessen wird dieser Fehler von 
      der anderen Trap-Anweisung abgefangen, die jeden Fehler mit 
      Abbruch abfängt. 


  Abfangen von Fehlern und Bereiche

      Wenn ein Fehler mit Abbruch im gleichen Bereich wie die 
      Trap-Anweisung auftritt, setzt Windows PowerShell nach dem 
      Ausführen der Trap-Anweisungen den Vorgang mit der Anweisung 
      nach dem Fehler fort. Wenn sich die Trap-Anweisung in einem 
      anderen Bereich als der Fehler befindet, wird die Ausführung 
      mit der nächsten Anweisung fortgesetzt, die sich im gleichen 
      Bereich wie die Trap-Anweisung befindet.
 

      Wenn beispielsweise in einer Funktion ein Fehler auftritt und 
      die Trap-Anweisung in der Funktion enthalten ist, wird das 
      Skript mit der nächsten Anweisung fortgesetzt. Das folgende 
      Skript enthält z. B. einen Fehler und eine Trap-Anweisung:

          function function1 {
              trap { "Fehler: " }
              NonsenseString
              "function1 wurde abgeschlossen"
              }


      Weiter unten im Skript führt die Ausführung der Funktion 
      "Function1" zum folgenden Ergebnis: 

          function1
          Fehler: 
          Der Begriff 'NonsenseString' wird nicht als Name eines 
          Cmdlet, einer Funktion, einer Skriptdatei oder eines 
          ausführbaren Programms erkannt. Überprüfen Sie die 
          Schreibung des Namens, oder, wenn ein Pfad eingeschlossen 
          ist, überprüfen Sie die Richtigkeit des Pfads, und 
          wiederholen Sie dann den Vorgang.
          At C:\PS>TestScript1.ps1:3 char:19
          +   NonsenseString <<<<

          function1 wurde abgeschlossen 
 

      Die Trap-Anweisung in der Funktion fängt den Fehler auf. Wenn 
      die Meldung angezeigt wurde, setzt Windows PowerShell die 
      Ausführung der Funktion fort. Beachten Sie, dass Function1 
      abgeschlossen wurde.


      Vergleichen Sie dies mit dem folgenden Beispiel, das den 
      gleichen Fehler und die gleiche Trap-Anweisung enthält. In 
      diesem Beispiel befindet sich die Trap-Anweisung außerhalb der 
      Funktion:

          function function2 {
              NonsenseString
              "function2 wurde abgeschlossen"
              }

          trap { "Fehler: " }
              . . .
          function2


      Weiter unten im Skript führt die Ausführung der Funktion 
      "Function2" zum folgenden Ergebnis:

          Fehler: 
          Der Begriff 'NonsenseString' wird nicht als Name eines 
          Cmdlet, einer Funktion, einer Skriptdatei oder eines 
          ausführbaren Programms erkannt. Überprüfen Sie die 
          Schreibung des Namens, oder, wenn ein Pfad eingeschlossen 
          ist, überprüfen Sie die Richtigkeit des Pfads, und 
          wiederholen Sie dann den Vorgang.
          At C:\PS>TestScript2.ps1:4 char:19
          +   NonsenseString <<<<


      In diesem Beispiel wurde der Befehl "function2 wurde 
      abgeschlossen" nicht ausgeführt. Wenn sich die Trap-Anweisung 
      außerhalb der Funktion befindet, liegen zwar beide Fehler mit 
      Abbruch innerhalb einer Funktion vor, doch wechselt Windows 
      PowerShell nach dem Ausführen der Trap-Anweisung nicht zur 
      Funktion zurück.


  Verwenden des Break-Schlüsselworts und des Continue-Schlüsselworts

      Mit dem Break-Schlüsselwort und dem Continue-Schlüsselwort in 
      einer Trap-Anweisung können Sie bestimmen, ob ein Skript oder 
      ein Befehl nach einem Fehler mit Abbruch weiterhin ausgeführt 
      werden soll. 


      Wenn Sie eine Break-Anweisung in eine Trap-Anweisung-Liste 
      einschließen, wird die Funktion oder das Skript von Windows 
      PowerShell beendet. In der folgenden Beispielfunktion wird das 
      Break-Schlüsselwort in einer Trap-Anweisung verwendet:

          C:\PS> function break_example {
              trap {"Fehler abgefangen"; break;}
              1/$null
              "Funktion abgeschlossen."
              }

          C:\PS> break_example
          Fehler abgefangen
          Versucht, durch 0 zu dividieren.
          Bei Zeile:4 Zeichen:7


      Da die Trap-Anweisung das Break-Schlüsselwort enthält, wird die 
      Funktion nicht weiter ausgeführt, und die Zeile "Funktion 
      abgeschlossen" wird nicht ausgeführt.


      Wenn Sie in eine Trap-Anweisung die Continue-Anweisung 
      einfügen, wird Windows PowerShell nach der Anweisung 
      fortgesetzt, die den Fehler verursacht hat, als ob Break oder 
      Continue nicht vorhanden wären. Bei Verwendung des 
      Continue-Schlüsselworts wird von Windows PowerShell jedoch kein 
      Fehler in den Fehlerstream geschrieben. 


      In der folgenden Beispielfunktion wird das Continue-Schlüssel-
      wort in einer Trap-Anweisung verwendet:

          C:\PS> function continue_example {
              trap {"Fehler abgefangen"; continue;} 
              1/$null
              "Funktion abgeschlossen."}

          C:\PS> continue_example
          Fehler abgefangen
          Funktion abgeschlossen. 


      Die Funktion wird fortgesetzt, nachdem der Fehler abgefangen 
      wurde, und die Anweisung "Funktion abgeschlossen" wird 
      ausgeführt. In den Fehlerstream wird kein Fehler geschrieben. 


SIEHE AUCH
    about_Break
    about_Continue
    about_Throw
    about_Try_Catch_Finally
    about_Scopes