Scripts avancés
Ce chapitre traite des structures conditionnelles, des différentes boucles et des exceptions.
Objectifs
À la fin de ce chapitre, vous serez capable de :
- Écrire des fonctions et réutiliser du code.
- Utiliser des structures conditionnelles et des boucles pour automatiser des traitements.
- Gérer les erreurs avec Try/Catch et comprendre les erreurs terminées/non-terminées.
Fonctions
La syntaxe d'une fonction :
function FuncHello()
{
param($name)
$date = (Get-Date).ToShortDateString()
Write-Host "Salut $name, nous sommes le $date"
}La fonction est appelée avec le nom en paramètre d'entrée :
FuncHello("Toto")Un autre exemple avec le résultat :

Structure conditionnelle
Structure permettant un choix en fonction d'une expression booléenne.
if (expression booléenne)
{instructions}
elseif (expression booléenne)
{instructions}
else
{instructions}Switch
Permet des choix multiples.
switch (expression)
{
valeur1
{instructions}
valeur2
{instructions}
default
{instructions}
}Boucles
While
L'expression booléenne est testée en premier.
while (expression booléenne)
{instructions}Do-While
Il y aura au minimum un passage étant donné que l'expression booléenne est testée à la fin.
do
{instructions}
while (expression booléenne)For
Permet de définir le point de départ et celui d'arrivée.
for (expression initiale; expression booléenne; expression finale)
{instructions}L'expression initiale permet d'initialiser le compteur, alors que la finale permet de l'incrémenter.
Foreach-Object
Permet de parcourir les valeurs d'une collection (généralement d'un tableau).
Foreach ($Element in $Collection)
{instructions}Il y a d'autres commandes utiles pour les objects.

Try-Catch
Cette structure permet d'essayer une instruction et de récupérer l'erreur en cas de problème.
try
{instructions}
catch
{message}Ces instructions fonctionnent correctement lorsque les erreurs sont des erreurs de type terminées.
Si elles sont non-terminées alors il faut spécifier l'arrêt de l'instruction :
try
{instructions} -Erroraction Stop
catch
{message}Il est possible d'avoir plusieurs blocs Catch et on peut spécifier le type d'erreur avec par exemple catch[System.IO.IOException].
Pour trouver le nom du type complet et correct de l'erreur, il faut utiliser $error[0].exception.gettype().fullname.
Une fonction, un script ou une tâche peuvent se terminer « mal » par un exit1 ou une exception. Le résultat de la dernière exécution sera n’importe quelle valeur sauf le 0. Tout ce qui est bien terminé exit = exit0, aura un résultat à « 0x0 ». C’est ce que l’on observe dans le planificateur de tâches ci-dessous.

Ceci permet de faire des contrôles sur « les fichiers de log », que lorsque l’on sait qu’il y a eu un problème.
Résumé
- Les fonctions structurent et réutilisent le code.
- Les conditions et boucles permettent d’automatiser des décisions et répétitions.
- Try/Catch aide à contrôler le flux en cas d’erreur (avec
-ErrorAction Stopsi nécessaire).
