POWERSHELL: Gestion des erreurs d’exécution

Après Kixtart, Perl et Python, voici le tour de PowerShell !

Je découvre ce langage de script proposé par Microsoft et disponible depuis XP jusqu’à 2008 Server R2.

Comme à mon habitude, je vais vous faire partager quelques bouts de code que j’ai assemblé.

Aucun script n’est parfait ! Grâce au mécanisme de gestion des exceptions, il est possible de prévoir quelles actions exécuter en cas de problèmes !

# Corps principal du script

try

{

Write-Host « boucle principale »

}

# on execute ce script si une erreur non prevue survient

catch

{

Write-Error
$_.Exception.ToString()

}

# on execute ce script quoi qu’il arrive

finally

{

Write-Host « boucle finale »

}

Voici le résultat de l’exécution de ce script dans l’excellent éditeur PowerGUI


Par contre, si génère une erreur (une division par 0, par exemple)…

# Corps principal du script

try

{

Write-Host « boucle principale »

# on génère une erreur fatale

$y
= 0

$x
= 5/$y

}

# on execute ce script si une erreur non prevue survient

catch

{

Write-Error
$_.Exception.ToString()

}

# on execute ce script quoi qu’il arrive

finally

{

Write-Host « boucle finale »

}

… le résultat est celui-ci.


Il est possible de générer des exceptions proprement avec la commande « throw ».

# Corps principal du script

try

{

Write-Host « boucle principale »

# on génère une erreur fatale

throw
“Une erreur !!!”

}

# on execute ce script si une erreur non prevue survient

catch

{

Write-Error
$_.Exception.ToString()

}

# on execute ce script quoi qu’il arrive

finally

{

Write-Host « boucle finale »

}


Du coup, on peut gérer très simplement l’absence de paramètres d’une fonction.

function
MaFonction

{

param($path
= $(throw
“il manque un paramètre”))

Write-Host « Dans Mafonction »


}

# Corps principal du script

try

{

Write-Host « boucle principale »

# on génère une erreur fatale

MaFonction

}

# on execute ce script si une erreur non prevue survient

catch

{

Write-Error
$_.Exception.ToString()

}

# on execute ce script quoi qu’il arrive

finally

{

Write-Host « boucle finale »

}


A propos Olivier Olejniczak

Cofondateur de SynerGeek.fr. Passionné d'informatique, je m'intéresse plus particulièrement aux technologies de virtualisation et de stockage. J'apprécie la liberté et la quasi-absence de frontières à mon imagination qu'offre l'OpenSource et Linux. Professionnellement, je travaille exclusivement avec les outils Microsoft. Les pieds bien sur terre et ancrés dans le quotidien de l'entreprise, j'aime faire partager mes découvertes et contribuer à un meilleur usage des technologies. Vous aussi, rejoignez-nous sur Synergeek et partagez votre expérience!

Je vous propose également...

JSON dans les scripts Bash avec Ticktick

Je vais vous présenter l’ami du WGET par excellence. Imaginez le contexte suivant : sur …

Maintenir son site web perso : une plaie !

Un blog, un compte Twitter, un compte viadeo, un compte LikeDin, un compte Google+, un …

1 commentaire

  1. Bonjour

    Merci pour ces précisions.
    cependant j’ai effectué un script A
    Dans ce script, j’effectue une modification d’emailadresses par rapport à un CSV (qui fonctionne parfaitement bien)
    ———-
    Import-Csv “.email_user.csv” | foreach {
    Set-Mailbox $_.login -PrimarySmtpAddress $_.emailadresse -EmailAddressPolicyEnabled $false
    }
    Import-Csv “.email_user.csv” | foreach {
    get-mailbox $_.login | fl PrimarySmtpAddress,Emailaddresses > “c:resultatEmailaddressestest $_.login.csv”
    }
    ——————

    Cependant en cas d’erreur de login, de mail, de contexte, j’ai des alertes [couleur rouge] dans powershell que j’aimerai recupéré dans un CSV.
    Nous allons programmé de nuit la modification donc je ne serais pas présent pour voir les erreurs potentiel.

    Auriez vous une idee?

    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *