• 04/01/2019
  • 6 minutes pour lire
    • S
    • s
    • c

DESCRIPTION COURTE

Explique comment utiliser la balise Try, Catch et Finally blocs de handleterminating erreurs.,

DESCRIPTION longue

utilisez les blocsTry,Catch EtFinally pour répondre ou gérer les erreurs de terminaison dans les scripts. L’instructionTrap peut également être utilisée pour gérer les erreurs terminatingerrors dans les scripts. Pour plus d’informations, voir about_Trap.

Une erreur de fin empêche une instruction de s’exécuter. Si PowerShell ne gère pas une erreur de fin d’une manière ou d’une autre, PowerShell arrête également d’exécuter la fonction ou le script à l’aide du pipeline actuel., Dans d’autres langages, tels que C#,les erreurs de terminaison sont appelées exceptions.

utilisez le blocTry pour définir une section d’un script dans laquelle vous wantPowerShell pour surveiller les erreurs. Lorsqu’une erreur se produit dans le Try bloc,l’erreur est enregistré dans le $Error variable automatique. PowerShell recherche ensuite un blocCatch pour gérer l’erreur., Si l’instructionTry n’a pas de blocCatch correspondant, PowerShell continue de rechercher un blocCatch approprié ouTrap dans les portées parentes. Après unCatch bloc est terminé ou si aucun Catch ou Trapde l’énoncé, la balise Finally bloc est exécuté. Si l’erreur ne peut pas être gérée,l’erreur est écrite dans le flux d’erreurs.,

un blocCatch peut inclure des commandes pour suivre l’erreur ou pour récupérer le flux attendu du script. Un blocCatch peut spécifier quelle erreur typesit capture. Une instructionTry peut inclure plusieurs blocsCatch pour différents types d’erreurs.

un blocFinally peut être utilisé pour libérer toutes les ressources dont votre script n’a plus besoin.,

Try, Catch, and Finally resemble the Try, Catch, and Finallykeywords used in the C# programming language.

SYNTAX

A Try statement contains a Try block, zero or more Catch blocks, and zeroor one Finally block. A Try statement must have at least one Catch blockor one Finally block.,

voici Le Try bloc de syntaxe:

try {<statement list>}

Le Try mot-clé est suivi par une liste d’instructions entre accolades. Si une terminatingerror se produit pendant l’exécution des instructions de la liste d’instructions, thescript transmet l’objet error du bloc Try à un bloc Catchapproprié.

voici Le Catch bloc de syntaxe:

catch *] {<statement list>}

types d’Erreur apparaissent entre parenthèses., Les crochets les plus extérieurs indiquent que l’élément estoptionnel.

le mot-clé Catch est suivi d’une liste facultative de types d’erreurs et d’une liste d’instructions. Si une erreur de fin se produit dans le blocTry, PowerShell recherche un blocCatch approprié. Ifone est trouvé, les instructions dans le bloc Catch sont exécutées.

Le Catch bloc peut spécifier un ou plusieurs types d’erreur. Un type d’erreur est une exception aMicrosoft .NET Framework ou une exception dérivée d’un.,Exception NETFramework. Un blocCatch gère les erreurs de la valeur spécifiée .Classe d’exception NETFramework ou de toute classe dérivant de la classe specifiedclass.

Si Catch bloc spécifie un type d’erreur, que le Catch bloquer les poignées thattype d’erreur. Si un blocCatch ne spécifie pas de type d’erreur, ce blocCatchgère toute erreur rencontrée dans le blocTry., Une instructionTry peut inclure plusieurs blocsCatch pour les différents types d’erreur spécifiés.

ce qui suit montre la syntaxe du bloc Finally:

finally {<statement list>}

le mot-clé Finally est suivi d’une liste d’instructions qui s’exécute chaque fois que thescript est exécuté, même si le Try S’est exécutée sans erreur ou une erreur a été détectée dans une instruction Catch.

notez qu’appuyer sur CTRL+C arrête le pipeline., Les objets envoyés au pipeline ne seront pas affichés en sortie. Par conséquent, si vous incluez une instruction à afficher, telle que « Finally block has run », elle ne sera pas affichée après avoir appuyé sur CTRL+C, même si le blocFinally s’est exécuté.

la CAPTURE des ERREURS

L’exemple de script suivant montre un Try bloc Catch bloc:

try { NonsenseString }catch { "An error occurred." }

Le Catch mot clé doit suivre immédiatement la balise Try ou un autre Catchbloc.,

PowerShell ne reconnaît pas « NonsenseString » comme une applet de commande ou un autre élément.L’exécution de ce script renvoie le résultat suivant:

An error occurred.

lorsque le script rencontre « NonsenseString », il provoque une erreur de fin. Le blocCatch gère l’erreur en exécutant la liste d’instructions à l’intérieur du bloc.

en utilisant plusieurs instructions CATCH

Une instructionTry peut avoir n’importe quel nombre de blocsCatch., Par exemple, le script suivant a un bloc Try qui télécharge MyDoc.doc, Et il contient deux blocs Catch:

le premier bloc Catch gère les erreurs du System.Net.il s’agit d’un système d’exception et d’un système.io.IOException. Le deuxième blocCatch ne spécifie pas de type d’erreur. Le deuxième blocCatch gère toutes les autres erreurs de terminaison qui se produisent.

PowerShell correspond aux types d’erreur par héritage. Un blocCatch gère les erreurs spécifiées .,Classe D’exception NET Framework ou de toute classe dérivant de la classe spécifiée. L’exemple suivant contient un blocCatch qui correspond à une erreur « Command Not Found »:

catch {"Inherited Exception" }

Le type d’erreur spécifié, CommandNotFoundException, hérite du système.Type d’exception SystemException. L’exemple suivant intercepte également une erreur CommandNot Found:

catch {"Base Exception" }

ce blocCatch gère l’erreur « Command Not Found » et d’autres erreurs thatinherit du type SystemException.,

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

utilisation de Trap dans un Try Catch

lorsqu’une erreur de terminaison se produit dans un blocTry avec unTrap défini dans le blocTry, même s’il existe unCatch bloc, la déclarationTrap prend le contrôle.,

Si Trap existe plus à bloc que le Try, et il n’y a pas de correspondanceCatch bloc dans le champ d’application actuel, la balise Trap va prendre le contrôle même ifany parent a une correspondance Catch bloc.

accès aux informations D’EXCEPTION

Dans un blocCatch, l’erreur actuelle est accessible à l’aide de$_, également connu sous le nom de$PSItem. L’objet est de type ErrorRecord.,

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_}

L’exécution de ce script renvoie le résultat suivant:

An Error occurred:The term 'NonsenseString' is not recognized as the name of a cmdlet, function,script file, or operable program. Check the spelling of the name, or if a pathwas included, verify that the path is correct and try again.

Il existe des propriétés supplémentaires accessibles, telles que ScriptStackTrace,Exception et ErrorDetails. Par exemple, si on modifie le script suivant:

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_.ScriptStackTrace}

Le résultat sera similaire à:

An Error occurred:at <ScriptBlock>, <No file>: line 2

en LIBÉRANT des RESSOURCES EN UTILISANT ENFIN

Pour libérer les ressources utilisées par un script, ajouter un Finally bloc après la balise Try etCatch blocs., Les instructions de blocFinally s’exécutent indépendamment du fait que le blocTry rencontre une erreur de fin. PowerShell exécute le blocFinally avant la fin du script ou avant que le bloc actuel ne sorte de la portée.

un blocFinally s’exécute même si vous utilisez CTRL+C pour arrêter le script. Un blocFinally s’exécute également si un mot-clé Exit arrête le script à partir d’un blocCatch.,

VOIR AUSSI

about_Break

about_Continue

about_Scopes

about_Throw

about_Trap