4-Scripts - Base

Un script est un ensemble de commandes permettant d’effectuer une tâche.

Le fichier aura une extension .ps1 et un double-clique provoque l’ouverture du fichier avec notepad.

Si l’on veut exécuter le script, il faut le faire depuis ISE, une boite de commande ou le planificateur de tâches. Dans certains cas, les droits administrateurs sont requis.

Par défaut, la stratégie de sécurité de Microsoft bloque l’exécution des scripts (Restricted).

On active l’exécution des scripts sur une machine avec la commande Set-ExecutionPolicy et il est nécessaire d’avoir les droits administrateur. La stragégie Unrestricted s’applique dans notre cas, car nous sommes dans une école. Ce ne serait pas prudent dans une entreprise.

Les zones d’un script sont : l’en-tête, la zone pour les paramètres et les variables, les fonctions et enfin le corps du script.

../_images/Capt-zones-script.PNG
En-tête:

Pour les commentaires, on utilise le #, pour une seule ligne et <#…#> pour plusieurs lignes

# commentaire
Write-Host "HELLO"

Pour plusieurs lignes

<# commentaires
   commentaires
   commentaires
#>

Dans le canevas fourni dans la première page du cours, l’en-tête du fichier est composée de plusieurs parties.

L’aide utilise ces différentes parties : .NOTES, .SYNOPSIS, .DESCRIPTION,…

../_images/Capt-aff-help.PNG

Chaque partie correspond à une rubrique de l’aide. Il est impératif de respecter le point et les majuscules.

Pour la totalité des possibilités pour l’aide, voir sur le site de Microsoft :

Powershell help

La partie du code qui affiche l’aide fait appel à la variable $MyInvocation qui donne des indications sur le script

Lorsque l’aide s’affiche, le résultat donne

../_images/Capt-aff-help-console.PNG

Les parties NOTES, .SYNOPSIS, .DESCRIPTION et .EXEMPLE sont toujours présentes et les autres sont ajoutées si besoin.

Possible seulement 1 fois : .NOTES, .SYNOPSIS, .DESCRIPTION, .OUTPUTS

Possible plusieurs fois : .PARAMETER, .EXEMPLE, .LINK

  • .NOTES : informations sur l’auteur, date

  • .SYNOPSIS : max 1 ligne, comme un titre

  • .DESCRIPTION : explications complètes sur ce que fait le script, ce qui se passe en cas d’erreur, le résultat attendu

  • .PARAMETER : le nom du paramètre, ce qu’il fait, son type, les contraintes,… et un seul à la fois

  • .OUTPUTS : ce qui est généré, fichier d’erreurs, création d’utilisateur(s), modification d’une clé,…

  • .EXEMPLE . ligne pour lancer le script et aussi un seul à la fois et bien si min 2 exemples

  • .LINK : lien sur un site ou prérequis comme nom d’un ou plusieurs script(s) (par exemple : utilisation de 2 scripts Create-User et Create-Group dans un Add-UserGroup)

A noter que .INTPUTS existe et que cela défini ce qui peut provenir du pipe.

Normes de codage:

On respecte les normes de codage définies dans l’école.

Pour le nom des scripts, on utilise Firstname-Verb-Noun, avec des majuscules pour la première lettre du verbe et du nom. On ajoute le prénom devant le nom du script, pour que l’enseignant puisse différencier les scripts lors de contrôles!!!

Pour les noms des paramètres (après « param ») et des fonctions dans le script, on utilise UpperCamelCase

Pour les variables, on utilise lowerCamelCase.

La notion de guard clauses permet l’optimisation du code en évitant de le parcourir entièrement en cas d’informations fausses ou manquantes

Il faut éviter d’utiliser la partie else et plutôt ajouter un exit dans la partie if

2 exemples sont le test des paramètres du script et les droits administrateur

Guard clauses

Les paramètres:

Dans le script, la première ligne de code doit être param

Dans le cas d’un script, les paramètres non explicitement sélectionnés seront pris dans l’ordre, mais dans le cas d’une cmdlet, il ne tient compte que du premier de la liste.

../_images/Capt-param-defaut-cmdlet.PNG
Scripts:

Si le script est exécuté avec les paramètres.

../_images/Capt-Give-Name-et-result.PNG

Les paramètres d’un script que l’on a codé auront le même comportement, à savoir que lorsque l’on tape le - la liste des paramètres s’affiche dans un menu déroulant.

../_images/Capt-script-menu-param.PNG

Dans l’aide, la liste des paramètres sera définie par .PARAMETER.

../_images/Capt-script-param-description.PNG

Concernant le menu des paramètres, il est établi lorsque l’on définit les variables du script.

../_images/Capt-script-param-var.PNG

Le corps du script se situe après la définition des paramètres et du test de la présence du(es) paramètre(s)

../_images/Capt-script-body.PNG
Attributs de paramètres:

On peut donner des caractéristiques particulières à un paramètre, dans le même esprit que pour typer une variable!

param([Parameter(Mandatory=$True,
                                Position=0,
                                ValueFromPipeline=$True)]
          [string]$RequiredParam,
          $NotRequiredParam)

Concernant le paramètre $RequiredParam, Mandatory définit qu’il est obligatoire, Position qu’il doit être en première position et ValueFromPipeline que les données peuvent provenir d’un pipe.

Les arguments:

Les arguments seront mis « de manière libre » après le nom du scipt

Dans la liste des variables automatiques, il y a $Args et c’est un tableau des arguments passés lors de l’exécution d’un script

Ce tableau peut contenir plusieurs sortes d’éléments et sa longueur s’obtient avec $Args.length

Un script qui ne contient que $args, affichera le contenu du tableau des arguments fournis lors du lancement du script

../_images/Capt-args-et-result.PNG
Debug:

Dans ISE, il y a un menu Déboguer

Dans ISE et dans VS Code, les raccourcis sont : F5 : exécuter F9 : ajouter un point de debug F10 : pas à pas (step over) F11 : pas à pas détaillé (step into) On peut voir le contenu d’une variable en passant dessus lentement avec le curseur.

Avec VS Code, il faut ajouter un fichier texte et le sauvegarder en choisissant le type Powershell

Exercices: