Powershell erreur
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Domaine | Gestion des erreurs PowerShell |
| Variable clé | $ErrorActionPreference
|
| Mécanismes | try/catch/finally, trap, throw
|
| Voir aussi | Set-PSDebug · Trace-command |
PowerShell distingue les erreurs critiques (terminating, qui arrêtent l'exécution) des
erreurs non critiques (non-terminating, qui laissent le script continuer). Le comportement se
règle globalement via $ErrorActionPreference ou sélectivement via le paramètre commun
-ErrorAction.
Préférence globale
La variable $ErrorActionPreference accepte les valeurs suivantes :
$ErrorActionPreference = 'SilentlyContinue' # ignore l'erreur et continue
$ErrorActionPreference = 'Continue' # affiche l'erreur et continue (défaut)
$ErrorActionPreference = 'Stop' # transforme en erreur critique
$ErrorActionPreference = 'Inquire' # demande à l'utilisateur
Paramètres communs
-ErrorAction (SilentlyContinue | Continue | Inquire | Stop)
-ErrorVariable <nom de variable>
-Debug {$true | $false}
-Verbose {$true | $false}
-OutVariable <nom de variable>
-OutBuffer <int32>
Get-ChildItem "c:\" -ErrorAction SilentlyContinue
Get-ChildItem "c:\" -ErrorAction Inquire
# On retrouve le message d'erreur avec :
$Error[0]
# Capturer les erreurs dans une variable dédiée
Get-ChildItem "c:\" -ErrorVariable MaVar
$MaVar | Get-Member -Force
Récupérer une erreur non critique
& {
$ErrorActionPreference = 'SilentlyContinue'
[int]$i = 'ABC' # source de l'erreur
if ($?) {
Write-Host 'Tout est ok'
}
else {
Write-Host "Une erreur est survenue : $($Error[0].Exception.Message)"
}
Write-Host 'Suite du script'
}
Deux variables automatiques utiles :
$? # $true si la dernière opération a réussi
$LastExitCode # code de retour du dernier programme externe
Récupérer une erreur critique (trap)
& {
$ErrorActionPreference = 'Continue'
for ($i = -2; $i -le 2; $i++) {
trap { 'Erreur critique détectée !'; break }
100 / $i
}
Write-Host 'suite...'
}
Un trap peut être défini dans l'étendue parent et dans l'étendue enfant :
& {
$ErrorActionPreference = 'Continue'
trap { "Exception détectée dans l'étendue parent !"; break }
for ($i = -2; $i -le 2; $i++) {
trap { "Exception détectée dans l'étendue enfant !"; break }
100 / $i
}
Write-Host 'suite...'
}
throw
& {
$ErrorActionPreference = 'Continue'
trap { 'Exception détectée : ' + $_ }
throw 'Ma première exception personnalisée !'
}
throw sert aussi à rendre un paramètre obligatoire :
function Bonjour ($prenom = $(throw 'Il manque le paramètre -Prenom')) {
Write-Host "Bonjour $prenom" -ForegroundColor Green
}
try / catch / finally
try { <bloc instructions> }
catch [<type d'erreur>] { <bloc instructions> }
finally { <bloc instructions> }
function Boucle {
for ($i = -2; $i -le 2; $i++) {
try { 100 / $i }
catch { Write-Host 'Erreur dans le script !' }
}
}
Débogage
$DebugPreference = 'Continue'
$DebugPreference = 'Stop'
Voir aussi Set-PSDebug.
Voir aussi
- Set-PSDebug — mode pas à pas et trace
- Trace-command — débogage bas niveau
- Set-PSBreakpoint — points d'arrêt