Partager via


about_Trap

RUBRIQUE
    about_Trap

DESCRIPTION COURTE
    Décrit un mot clé qui gère une erreur avec fin d'exécution.


DESCRIPTION LONGUE
    Une erreur avec fin d'exécution empêche une instruction de 
    fonctionner. Si Windows PowerShell ne parvient pas à gérer une 
    erreur avec fin d'exécution d'une manière ou d'une autre, Windows 
    PowerShell cesse également d'exécuter la fonction ou le script 
    dans le pipeline actuel. Dans d'autres langages, tels que C#, les 
    erreurs avec fin d'exécution sont connues sous le nom d'exceptions.


    Le mot clé Trap spécifie une liste d'instructions à exécuter 
    lorsqu'une erreur avec fin d'exécution se produit. Les 
    instructions Trap gèrent les erreurs avec fin d'exécution et 
    autorise l'exécution du script ou de la fonction afin qu'elle se 
    poursuive au lieu de s'arrêter.


  Syntaxe

      La syntaxe de l'instruction Trap est la suivante :

          trap [[<error type>]] {<statement list>}


      L'instruction Trap inclut une liste d'instructions à exécuter 
      lorsqu'une erreur avec fin d'exécution se produit. Le mot clé 
      Trap peut spécifier un type d'erreur de manière facultative. Un 
      type d'erreur requiert des crochets. 


      Un script ou une commande peuvent avoir plusieurs instructions 
      Trap. Les instructions Trap peuvent apparaître n'importe où 
      dans le script ou la commande. 


  Interruption de toutes les erreurs avec fin d'exécution

      Lorsqu'une erreur avec fin d'exécution, non gérée d'une autre 
      manière dans un script ou une commande, se produit, Windows 
      PowerShell vérifie la présence d'une instruction Trap qui gère 
      l'erreur. Si une instruction Trap est présente, Windows 
      PowerShell continue d'exécuter le script ou la commande dans 
      l'instruction Trap.
 

      L'exemple suivant est une instruction Trap très facile :

          trap {"Erreur détectée."}


      Cette instruction Trap intercepte toute erreur avec fin 
      d'exécution. L'exemple suivant est une fonction qui contient 
      cette instruction Trap :

          function TrapTest {
              trap {"Erreur détectée."}
              nonsenseString
              }


      Cette fonction inclut une chaîne fantaisiste " nonsenseString " 
      qui provoque une erreur. L'exécution de cette fonction retourne 
      les éléments suivants :

          C:\PS> TrapTest
          Erreur détectée.


      L'exemple suivant inclut une instruction Trap qui affiche 
      l'erreur en utilisant la variable automatique $_ :

          function TrapTest {
              trap {"Erreur détectée : $_"}
              nonsenseString
              }


      L'exécution de cette version de la fonction retourne les 
      éléments suivants :

          C:\PS> TrapTest
          Erreur détectée : Le terme " nonsenseString " n'est pas 
          reconnu comme nom d'applet de commande, fonction, fichier 
          de script ou programme exécutable.  Vérifiez l'orthographe 
          du nom, ou si un chemin d'accès existe, vérifiez que le 
          chemin d'accès est correct et réessayez. 


      Les instructions Trap peuvent également être plus complexes. 
      Une instruction Trap peut inclure plusieurs conditions ou 
      appels de fonction. Il peut enregistrer, tester, ou même 
      exécuter un autre programme.


   Interruption d'erreurs avec fin d'exécution spécifiées

      L'exemple suivant est une instruction Trap qui intercepte le 
      type d'erreur CommandNotFoundException :

          trap [System.Management.Automation.CommandNotFoundException]
              {"Erreur de commande interceptée"}


      Lorsqu'une fonction ou un script rencontre une chaîne qui ne 
      correspond pas à une commande connue, cette instruction Trap 
      affiche la chaîne " Erreur de commande interceptée ". Après 
      avoir exécuté toutes les instructions dans la liste d'instruction 
      Trap, Windows PowerShell écrit l'objet erreur dans le flux 
      d'erreurs et reprend l'exécution du script.


      Windows PowerShell utilise les types d'exception Microsoft .NET 
      Framework. L'exemple suivant spécifie le type d'erreur 
      System.Exception :

          trap [System.Exception] {"Une erreur interceptée"}


      Le type d'erreur CommandNotFoundException hérite du type 
      System.Exception. Cette instruction intercepte une erreur créée 
      par une commande inconnue. Elle intercepte également d'autres 
      types d'erreur.


      Vous pouvez avoir plusieurs instructions Trap dans un script. 
      Chaque erreur peut être interceptée par une seule instruction 
      Trap. Si une erreur se produit tandis que plusieurs instructions 
      Trap sont disponibles, Windows PowerShell utilise l'instruction 
      Trap avec le type d'erreur le plus spécifique qui correspond 
      à l'erreur. 


      L'exemple de script suivant contient une erreur. Le script 
      inclut une instruction Trap générale qui intercepte toute 
      erreur avec fin d'exécution et une instruction Trap spécifique 
      qui détermine le type CommandNotFoundException.

          trap {"Autre erreur avec fin d'exécution interceptée" } 
          trap [System.Management.Automation.CommandNotFoundException] {"Erreur de commande interceptée"} 
          nonsenseString


      L'exécution de ce script produit le résultat suivant :

          Erreur de commande interceptée
          Le terme " nonsenseString " n'est pas reconnu comme nom 
          d'applet de commande, fonction, fichier de script ou 
          programme exécutable.  Vérifiez l'orthographe du nom, ou si 
          un chemin d'accès existe, vérifiez que le chemin d'accès 
          est correct et réessayez.
          À la ligne C:\PS>testScript1.ps1 : 3 Caractère : 19
          +   nonsenseString <<<< 


      Étant donné que Windows PowerShell ne reconnaît pas 
      " nonsenseString " comme applet de commande ou autre élément, 
      il retourne une erreur CommandNotFoundException. Cette erreur 
      avec fin d'exécution est interceptée par l'instruction Trap 
      spécifique.


      L'exemple de script suivant contient les mêmes instructions 
      Trap avec une erreur différente :

          trap {"Autre erreur avec fin d'exécution interceptée" } 
          trap [System.Management.Automation.CommandNotFoundException] 
              {"Erreur de commande interceptée"}
          1/$null


      L'exécution de ce script produit le résultat suivant :

          Autre erreur avec fin d'exécution interceptée
          Tentative de division par zéro.
          À la ligne C:\PS> errorX.ps1 : 3 Caractère : 7
          +   1/ <<<< $null


      La tentative de division par zéro ne crée pas d'erreur 
      CommandNotFoundException. Au lieu de cela, cette erreur est 
      interceptée par l'autre instruction Trap, qui intercepte toute 
      erreur avec fin d'exécution. 


  Interruption des erreurs et portée

      Si une erreur avec fin d'exécution se produit dans la même 
      portée que l'instruction Trap, après avoir exécuté les 
      instructions Trap, Windows PowerShell reprend l'exécution à 
      l'instruction située après l'erreur. Si l'instruction Trap est 
      dans une portée différente de l'erreur, l'exécution reprend à 
      l'instruction suivante située dans la même portée que 
      l'instruction Trap.
 

      Par exemple, si une erreur se produit dans une fonction tandis 
      que l'instruction Trap se situe dans cette même fonction, le 
      script reprend à l'instruction suivante. Par exemple, le script 
      suivant contient une erreur et une instruction Trap :

          function function1 {
              trap { "Une erreur : " }
              NonsenseString
              "function1 a été effectuée"
              }


      Ultérieurement dans le script, l'exécution de la fonction 
      Function1 produit le résultat suivant : 

          function1
          Une erreur : 
          Le terme " NonsenseString " n'est pas reconnu comme nom 
          d'applet de commande, fonction, fichier de script ou 
          programme exécutable.  Vérifiez l'orthographe du nom, ou si 
          un chemin d'accès existe, vérifiez que le chemin d'accès 
          est correct et réessayez.
          À la ligne C:\PS>TestScript1.ps1 : 3 Caractère : 19
          +   NonsenseString <<<<

          function1 a été effectuée 
 

      L'instruction Trap dans la fonction intercepte l'erreur. Après 
      avoir affiché le message, Windows PowerShell reprend 
      l'exécution de la fonction. Notez que Function1 a été effectuée.


      Comparez cet exemple avec le suivant, qui présente les mêmes 
      erreur et instruction Trap. Dans cet exemple, l'instruction 
      Trap se produit à l'extérieur de la fonction :

          function function2 {
              NonsenseString
              "function2 a été effectuée"
              }

          trap { "Une erreur : " }
              . . .
          function2


      Ultérieurement dans le script, l'exécution de la fonction 
      Function2 produit le résultat suivant :

          Une erreur : 
          Le terme " NonsenseString " n'est pas reconnu comme nom 
          d'applet de commande, fonction, fichier de script ou 
          programme exécutable.  Vérifiez l'orthographe du nom, ou si 
          un chemin d'accès existe, vérifiez que le chemin d'accès 
          est correct et réessayez.
          À la ligne C:\PS>TestScript2.ps1 : 4 Caractère : 19
          +   NonsenseString <<<<


      Dans cet exemple, la commande " function2 a été effectuée " n'a 
      pas été exécutée. Bien que les deux erreurs avec fin 
      d'exécution se produisent à l'intérieur d'une fonction, si 
      l'instruction Trap est à l'extérieur de la fonction, Windows 
      PowerShell ne revient pas dans la fonction après que 
      l'instruction Trap s'est exécutée.


  Utilisation des mots clés Break et Continue

      Vous pouvez utiliser les mots clés Break et Continue dans une 
      instruction Trap afin de déterminer si un script ou une 
      commande continue de s'exécuter après une erreur avec fin 
      d'exécution. 


      Si vous incluez une instruction Break dans une liste 
      d'instruction Trap, Windows PowerShell arrête la fonction ou le 
      script. L'exemple de fonction suivante utilise le mot clé Break 
      dans une instruction Trap :

          C:\PS> function break_example {
              trap {"Erreur interceptée"; break;}
              1/$null
              "Fonction effectuée."
              }

          C:\PS> break_example
          Erreur interceptée
          Tentative de division par zéro.
          À la ligne : 4 Caractère : 7


      Étant donné que l'instruction Trap a inclus le mot clé Break, 
      la fonction arrête de s'exécuter et la ligne " Fonction 
      effectuée " n'est pas exécutée.


      Si vous incluez une instruction Continue dans une instruction 
      Trap, Windows PowerShell reprend après l'instruction qui a 
      provoqué l'erreur, comme il le ferait sans Break ou Continue. 
      Avec le mot clé Continue, toutefois, Windows PowerShell n'écrit 
      pas une erreur dans le flux d'erreurs. 


      L'exemple de fonction suivant utilise le mot clé Continue dans 
      une instruction Trap :

          C:\PS> function continue_example {
              trap {"Erreur interceptée"; continue;} 
              1/$null
              "Fonction effectuée."}

          C:\PS> continue_example
          Erreur interceptée
          Fonction effectuée. 


      La fonction reprend après avoir intercepté l'erreur, 
      et l'instruction " Fonction effectuée " est exécutée. 
      Aucune erreur n'est écrite dans le flux d'erreurs. 


VOIR AUSSI
    about_Break
    about_Continue
    about_Throw
    about_Try_Catch_Finally
    about_Scopes