PowerShell surpasse l'invite de commandes Windows classique par sa puissance, mais cette force s'accompagne d'erreurs plus complexes. Lorsque votre script échoue sans raison apparente, la gestion des erreurs devient essentielle pour diagnostiquer et corriger rapidement.
Si vous maîtrisez d'autres langages, les bases vous sont familières, mais PowerShell présente des spécificités. Elle repose sur quatre piliers : le paramètre -ErrorAction, les blocs Try/Catch, la variable d'erreur et la journalisation.
Première étape : contrôlez les erreurs qui stoppent votre script. Si l'échec n'impacte pas la suite, demandez à PowerShell d'ignorer et de continuer.
Certaines cmdlets génèrent des erreurs non bloquantes, risquant des résultats erronés. Le paramètre -ErrorAction force le comportement désiré, ajouté en fin de ligne.
Get-ChildItem -Path "~\Documents\*.jpg" -Recurse -ErrorAction StopPour Get-ChildItem isolé, Stop arrête le script pour analyse. Pour plusieurs recherches, optez pour SilentlyContinue afin de poursuivre malgré l'échec.
Get-ChildItem -Path "~\Documents\*.jpg" -Recurse -ErrorAction SilentlyContinuePour un contrôle interactif, utilisez Inquire : PowerShell propose Oui, Oui à tous, Arrêter, Suspendre ou Aide.

Idéal pour des tâches courtes, mais évitez pour des scripts automatisés overnight.
-ErrorAction gère les cas simples. Pour plus de contrôle, utilisez Try/Catch.

Le bloc Try contient votre code normal avec -ErrorAction Stop pour déclencher Catch.
Try {
Get-Process "Cortana" -ErrorAction Stop
}Try bloque la suite en cas d'échec, protégeant les cmdlets dépendantes.
Dans Catch, définissez l'action corrective.
Catch {
Write-Host "Processus introuvable"
}Catch excelle pour des actions complexes comme l'envoi d'emails. Ajoutez Finally pour un code toujours exécuté.
Pour enquêter post-exécution, utilisez -ErrorVariable vers une variable personnalisée, alternative à $Error globale.
Définissez d'abord la variable, sans $ dans le paramètre.
Get-ChildItem -Path "~\Documents\*.jpg" -Recurse -ErrorAction Continue -ErrorVariable SearchErrorUn + accumule les erreurs. Combinez avec Try/Catch pour logs horodatés.

Créez un fichier log :
$SearchLog = New-Item "~\SearchLog.txt" -ItemType File -ErrorAction SilentlyContinueLoggez dans Catch :
Try {
Get-ChildItem -Path "~\Documents\*.jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError
}
Catch {
Add-Content -Path $SearchLog -Value "$(Get-Date -Format dd-MM-yy-HH_mm_ss) Fichiers non trouvés : $SearchError"
}Ajoutez des logs de succès en fin de Try. Votre script est désormais traçable.
PowerShell excelle en maintenance Windows, mais pour d'autres tâches, explorez Bash via WSL sur Windows 10.
[]