Recherche…


Introduction

Cette rubrique traite des types d'erreur et de la gestion des erreurs dans PowerShell.

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" 


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow