RUBRIQUE
    about_Try_Catch_Finally

DESCRIPTION COURTE
    Décrit comment utiliser les blocs Try, Catch et Finally pour gérer des 
    erreurs avec fin d'exécution.


DESCRIPTION LONGUE
    Utilisez les blocs Try, Catch et Finally pour répondre à des 
    erreurs avec fin d'exécution ou pour les gérer dans les scripts. 
    L'instruction Trap peut également être utilisée pour gérer des 
    erreurs avec fin d'exécution dans les scripts. Pour plus 
    d'informations, consultez about_Trap.


    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 à 
    l'aide du pipeline actuel. Dans d'autres langages, tels que C#, 
    les erreurs avec fin d'exécution sont connues sous le nom 
    d'exceptions. Pour plus d'informations sur les erreurs, consultez 
    about_Errors.


    Utilisez le bloc Try pour définir une section d'un script dans 
    lequel vous souhaitez que Windows PowerShell surveille les erreurs. 
    Lorsqu'une erreur se produit dans le bloc Try, l'erreur est d'abord 
    enregistrée dans la variable automatique $Error. Windows PowerShell 
    recherche ensuite un bloc Catch pour gérer l'erreur. Si l'instruction 
    Try n'a pas de bloc Catch correspondant, Windows PowerShell continue 
    à rechercher un bloc Catch ou une instruction Trap approprié dans les 
    portées parentes. Après qu'un bloc Catch a été exécuté ou si aucun 
    bloc Catch ni aucune instruction Trap approprié n'est identifié, le 
    bloc Finally est exécuté. Si l'erreur ne peut pas être gérée, elle 
    est écrite dans le flux d'erreurs.


    Un bloc Catch peut inclure des commandes pour le suivi de l'échec 
    ou pour la récupération du flux attendu du script. Un bloc Catch peut 
    spécifier les types d'erreurs qu'il intercepte. Une instruction Try 
    peut inclure plusieurs blocs Catch pour les différents types d'erreurs.


    Un bloc Finally peut être utilisé pour libérer des ressources qui 
    ne sont plus exigées par votre script. 


    Try, Catch et Finally ressemblent aux mots clés Try, Catch et Finally 
    utilisés dans le langage de programmation C#.


  Syntaxe
      Une instruction Try contient un bloc Try, zéro ou plusieurs 
      blocs Catch et zéro ou un bloc Finally. Une instruction Try 
      doit comporter au moins un bloc Catch ou un bloc Finally.


      La syntaxe du bloc Try est la suivante :

          try {<statement list>}


      Le mot clé Try est suivi d'une liste d'instructions entre 
      accolades. Si une erreur avec fin d'exécution se produit pendant 
      l'exécution des instructions de la liste d'instructions, le script 
      passe l'objet erreur du bloc Try à un bloc Catch approprié. 


      La syntaxe du bloc Catch est la suivante : 

          catch [[<error type>][',' <error type>]*] {<statement list>}


      Les types d'erreurs apparaissent entre crochets. Les crochets 
      les plus à l'extérieur indiquent que l'élément est facultatif.


      Le mot clé Catch est suivi d'une liste facultative de 
      spécifications de types d'erreurs et d'une liste d'instructions.
      Si une erreur avec fin d'exécution se produit dans le bloc 
      Try, Windows PowerShell recherche un bloc Catch approprié. Si 
      un bloc est trouvé, les instructions dans le bloc Catch sont 
      exécutées.


      Le bloc Catch peut spécifier un ou plusieurs types d'erreurs. 
      Un type d'erreur est une exception Microsoft .NET Framework ou une 
      exception dérivée d'une exception .NET Framework. Un bloc Catch gère 
      des erreurs de la classe d'exception .NET Framework spécifiée ou de 
      toute classe dérivée de la classe spécifiée.


      Si un bloc Catch spécifie un type d'erreur, ce bloc Catch gère 
      ce type d'erreur. Si un bloc Catch ne spécifie pas de type 
      d'erreur, ce bloc Catch gère toute erreur rencontrée dans le 
      bloc Try. Une instruction Try peut inclure plusieurs blocs 
      Catch pour les différents types d'erreurs spécifiés. 


      La syntaxe du bloc Finally est la suivante :

          finally {<statement list>}


      Le mot clé Finally est suivi d'une liste d'instructions qui 
      s'exécute chaque fois que le script est exécuté, même si 
      l'instruction Try s'est exécutée sans erreur ou si une erreur 
      a été interceptée dans une instruction Catch. 


      Notez qu'en appuyant sur CTRL+C, vous arrêtez le pipeline. Les 
      objets envoyés au pipeline ne seront pas affichés en tant que 
      sortie. Par conséquent, si vous incluez une instruction à 
      afficher, telle que " Le bloc Finally a été exécuté ", elle ne 
      s'affiche pas après que vous avez appuyé sur CTRL+C, même si le bloc 
      Finally a été exécuté.


  Interception d'erreurs
      L'exemple de script suivant montre un bloc Try avec un bloc Catch :

          try { NonsenseString }
          catch { "Une erreur s'est produite." }


      Le mot clé Catch doit suivre immédiatement le bloc Try ou un 
      autre bloc Catch. 


      Windows PowerShell ne reconnaît pas " NonsenseString " en tant 
      qu'applet de commande ou autre élément. L'exécution de ce 
      script retourne le résultat suivant :

          Une erreur s'est produite.


      Lorsque le script rencontre " NonsenseString ", il provoque une 
      erreur avec fin d'exécution. Le bloc Catch gère l'erreur en 
      exécutant la liste d'instructions à l'intérieur du bloc.


  Utilisation de plusieurs instructions Catch
      Une instruction Try peut comporter un nombre quelconque de 
      blocs Catch. Par exemple, le script suivant comporte un bloc Try qui 
      télécharge MyFile.doc et il contient deux blocs Catch :

          try
          {
             $wc = new-object System.Net.WebClient 
             $wc.DownloadFile("http://www.contoso.com/MyDoc.doc") 
          }
          catch [System.Net.WebException],[System.IO.IOException] 
          {
              "Impossible de télécharger MyDoc.doc à partir de http://www.contoso.com." 
          }
          catch
          {
              "Une erreur s'est produite et n'a pas pu être résolue." 
          }


      Le premier bloc Catch gère des erreurs de type System.Net.WebExc
      eption et System.IO.IOException. Le second bloc Catch ne spécifie 
      pas de type d'erreur. Le second bloc Catch gère toutes les autres 
      erreurs avec fin d'exécution qui se produisent.


      Windows PowerShell fait correspondre les types d'erreurs par 
      héritage. Un bloc Catch gère des erreurs de la classe d'exception 
      .NET Framework spécifiée ou de toute classe dérivée de la classe 
      spécifiée. L'exemple suivant contient un bloc Catch qui intercepte 
      une erreur " Commande introuvable " :

          catch [System.Management.Automation.CommandNotFoundException] 
          {"Exception héritée" }


      Le type d'erreur spécifié, CommandNotFoundException, 
      hérite du type System.SystemException. L'exemple suivant 
      intercepte également une erreur " Commande introuvable " :

          catch [System.SystemException] {"Exception de base" }


      Ce bloc Catch gère l'erreur " Commande introuvable " et 
      d'autres erreurs qui héritent du type SystemException.


      Si vous spécifiez une classe d'erreur et une de ses classes 
      dérivées, placez le bloc Catch pour la classe dérivée avant 
      le bloc Catch pour la classe générale.


  Libération de ressources à l'aide de Finally
      Pour libérer des ressources utilisées par un script, ajoutez un 
      bloc Finally après les blocs Try et Catch. Les instructions du 
      bloc Finally sont exécutées, que le bloc Try rencontre une erreur 
      avec fin d'exécution ou non. Windows PowerShell exécute le bloc 
      Finally avant la fin du script ou avant que le bloc actuel 
      soit hors de portée. 


      Un bloc Finally s'exécute même si vous utilisez CTRL+C pour 
      arrêter le script. Un bloc Finally s'exécute également si un 
      mot clé Exit arrête le script à partir d'un bloc Catch.


VOIR AUSSI
    about_Errors
    about_Trap




Table des matières