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