La gestion des erreurs se fait comme en C#, avec des balises try et catch.
Dans les balises try on essaye une opération. Si cette dernière ne fonctionne pas, alors c'est le code situé dans la balise catch qui est exécuté.
A noté que pour être catché, l'erreur doit être bloquante, c'est la raison pour laquelle dans l'exemple ci-dessous on utilise -Force -ErrorAction Stop
sur la commande Remove-Item
try
{
Remove-Item $("C:\unfichier.txt") -Force -ErrorAction Stop
}
catch
{
Write-host $($_.exception.message)
}
Lien vers le fichier : cliquez ici
Sinon de façon basique, on peut donner pour instruction de ne pas s'arrêter en cas d'erreur et on regarde quand voulu si une erreur a été remontée :
Clear-Host
$ErrorActionPreference = "Continue"
#$ErrorActionPreference = "silentlycontinue" #En cas d'erreur, on ne dit rien et on continu
$DebugPreference = "Continue" #En cas d'erreur, Powershell montrera le message et continuera
$Error.Clear() #Purge des erreurs
Get-PSSnapin vmware* #Passage d'une commande qui peut éventuellement provoquer une erreur
if($Error.Count -ne 0) #Si on a une erreur
{
Write-Host "Erreur : "
Write-Host $error[0] #Affichage de l'erreur
#break #Si nécessaire et si vous êtres dans une boucle, vous pouvez faire un break pour en sortir
}
Lien vers le fichier : cliquez ici
Autre exemple du même type :
#Exemples de gestion d'erreurs
#Version du 18 avril 2013
Clear-Host
$Error.Clear()
#Utilisation d'une variable qui agit au niveau du reste du script
#$ErrorActionPreference = "silentlycontinue" #Ne pas afficher les erreurs et continuer en cas de problème
#$ErrorActionPreference = "Stop" #Arrêter en cas d'erreur
#$ErrorActionPreference = "Inquire" #Demander quoi faire en cas de problème
#http://blogs.technet.com/b/heyscriptingguy/archive/2010/03/08/hey-scripting-guy-march-8-2010.aspx
#Ajouter -ErrorAction SilentlyContinue au niveau d'un appel n'affecte le comportement en cas d'erreur que lors de cet appel
#Ajouter -ErrorVariable ErrObj permet de récupérer un objet nommé ErrObj qui contient les infos de l'erreur générée
#Get-Content "C:\non-existent folder"
#Get-Content "C:\non-existent folder" -ErrorAction SilentlyContinue
Get-Content "C:\non-existent folder" -ErrorVariable ErrObj -ErrorAction SilentlyContinue
if ($error.Count -ieq 0){
Write-Host "Tout est Ok"
}
else{
#Affichage de l'erreur stockée dans $ErrObj
Write-Host $ErrObj[0]
}
#A l'inverse on aurait pu utiliser : Si il y a une erreur :
#if($Error.Count -ne 0) {
#}
Lien vers le fichier : cliquez ici
Pages Web
Site Web | Description |
---|---|
Scripting Guy | Gestion des erreurs par les Scripting Guy |
Technet about_Preference_Variables | Article Technet sur about_Preference_Variables |
Article(s) suivant(s)
Article(s) précédent(s)