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