.. ================================================== .. FOR YOUR INFORMATION .. -------------------------------------------------- .. -*- coding: utf-8 -*- with BOM. ================== 8-Scripts - Avancé ================== Ce chapitre traite des structures conditionnelles, des différentes boucles et des exceptions :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 : .. image:: Capt-fonct-write-date-et-result.PNG :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 .. image:: Capt-Com-Object.PNG :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 utilier **$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. .. image:: Capt-result-exec.PNG 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. :Exercices: * :download:`Exo Scripts avancé <../Exercices/E-122-8-ScriptsAvance.pdf>`