PowerShell
La gestion des erreurs
Recherche…
Introduction
Types d'erreur
Une erreur est une erreur, on pourrait se demander comment il pourrait y avoir des types dedans. Eh bien, avec Powershell, l’erreur tombe en gros sur deux critères:
- Erreur de terminaison
- Erreur non terminale
Comme son nom l'indique, les erreurs de terminaison mettront fin à l'exécution et une erreur de non-terminaison laissera l'exécution continuer à l'instruction suivante.
Cela est vrai en supposant que la valeur $ ErrorActionPreference est par défaut (Continue). $ ErrorActionPreference est une variable Prefrence qui indique à Powershell ce qu'il faut faire en cas d'erreur "non terminante".
Erreur de terminaison
Une erreur de terminaison peut être traitée avec une prise d'essai typique, comme ci-dessous
Try
{
Write-Host "Attempting Divide By Zero"
1/0
}
Catch
{
Write-Host "A Terminating Error: Divide by Zero Caught!"
}
L'extrait ci-dessus s'exécutera et l'erreur sera interceptée par le bloc catch.
Erreur non terminale
Une erreur de non-terminaison dans l'autre main ne sera pas interceptée par défaut dans le bloc catch. La raison en est une erreur de non-terminaison n'est pas considérée comme une erreur critique.
Try
{
Stop-Process -Id 123456
}
Catch
{
Write-Host "Non-Terminating Error: Invalid Process ID"
}
Si vous exécutez la ligne ci-dessus, vous n'obtiendrez pas la sortie du bloc catch puisque l'erreur n'est pas considérée comme critique et que l'exécution continuera simplement à partir de la commande suivante. Cependant, l'erreur sera affichée dans la console. Pour gérer une erreur de non-terminaison, vous devez simplement modifier la préférence d'erreur.
Try
{
Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
"Non-Terminating Error: Invalid Process ID"
}
Maintenant, avec la préférence d'erreur mise à jour, cette erreur sera considérée comme une erreur de terminaison et sera interceptée dans le bloc catch.
Invoquer des erreurs de terminaison et de non-terminaison:
La cmdlet Write-Error écrit simplement l'erreur dans le programme hôte invoquant. Cela n'arrête pas l'exécution. Où comme lancer vous donnera une erreur de fin et arrêter l'exécution
Write-host "Going to try a non terminating Error "
Write-Error "Non terminating"
Write-host "Going to try a terminating Error "
throw "Terminating Error "
Write-host "This Line wont be displayed"