- 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 Trap
de 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 Finally
keywords 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 Catch
approprié.
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 blocCatch
gè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 Catch
bloc.,
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 blocCatch
pour 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
Laisser un commentaire