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 »
}
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