Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici

Les variables

Qu’est-ce qu’une variable ?

Une variable sert, comme dans tout langage de programmation, à stocker ou récupérer des informations nécessaires au bon fonctionnement d’un script.

1. Comment déclarer une variable ?

Nous parlons de déclaration ou d’affectation pour décrire le fait d’initialiser une variable en lui associant une donnée ou une valeur.

La déclaration se fait en utilisant la syntaxe suivante : le caractère $ suivi du nom de la variable suivi du caractère = suivi de la valeur de la variable. Soit :

$MaVariable = ValeurdemaVariable 

Dans l’exemple suivant, nous allons déclarer deux variables $variable1 et $variable2. La première contiendra une valeur de type entier, tandis que la seconde contiendra une valeur de type texte.

PS C:\Users\Jerome> $variable1 = 18 
PS C:\Users\Jerome> $variable2 = "variable avec du texte" 

Pour changer le contenu d’une variable, il suffira de réutiliser la même écriture.

PS C:\Users\Jerome> $variable1 = 20 
PS C:\Users\Jerome> $variable2 = "bonjour" 

Nous avons vu précédemment qu’une des bonnes pratiques de PowerShell est d’utiliser la cmdlet Get-Command afin de lister les cmdlets disponibles comportant un terme précis.

Nous allons donc rechercher les différentes cmdlets comportant le mot « variable ».

PS C:\Users\damien.vanrobaeys> Get-Command *variable* 
 
Name 
---- 
Clear-Variable 
Get-Variable 
New-Variable 
Remove-Variable 
Set-Variable 

Nous avons donc ici différentes cmdlets disponibles.

Analysons maintenant le verbe de chacune d’elles :

  • Get : obtenir le contenu.

  • Clear : vider le contenu.

  • New : créer une nouvelle variable.

  • Remove : supprimer.

  • Set : configurer la valeur.

Il sera donc possible de créer une nouvelle variable avec la cmdlet New-Variable.

Utilisons maintenant une autre bonne pratique qui est de vérifier comment fonctionne cette cmdlet :

PS C:\Users\Jerome> Get-Help New-Variable 
 
NAME 
    New-Variable 
 
SYNTAX 
    New-Variable [-Name] <string> [[-Value] <Object>]  
[-Description <string>] [-Option {None | ReadOnly...

Les variables d’environnement

Lorsque nous exécutons PowerShell, nous avons des variables qui vont être définies automatiquement. Ces variables sont accessibles depuis l’ensemble des sessions PowerShell et contiennent les valeurs de l’environnement, c’est-à-dire de système d’exploitation et autre. Elles permettent de transmettre des informations entre les différents processus exécutés par Windows et sont disponibles dans un lecteur nommé Env.

Nous pouvons retrouver ce lecteur en utilisant la cmdlet Get-PSProvider.

PS C:\Users\damien.vanrobaeys> get-psprovider 
 
Name        Drives 
----        ------ 
Registry    {HKLM, HKCU} 
Alias       {Alias} 
Environment {Env} 
FileSystem  {C} 
Function    {Function} 
Variable    {Variable} 

Nous retrouvons bien ici notre lecteur Env dont le nom est Environment.

Pour afficher le contenu des variables d’environnement, nous utiliserons simplement la cmdlet Get-ChildItem ou son alias gci.

PS C:\Users\Jerome> Get-ChildItem Env: 
 
Name                           Value 
----                           ----- 
ALLUSERSPROFILE                C:\ProgramData 
APPDATA                        C:\Users\Jerome\AppData\Roaming 
ChocolateyInstall              C:\ProgramData\chocolatey 
ChocolateyLastPathUpdate       133023160763179918 
ChocolateyToolsLocation        C:\tools 
CommonProgramFiles             C:\Program Files\Common Files ...

Les variables automatiques

PowerShell dispose de variables automatiques qui stockent des informations de traitement. Elles sont créées et gérées par Windows PowerShell.

Nom de la variable

Valeur ou description

$$

Contient la dernière valeur de la commande saisie dans la console.

$?

Contient true si la dernière opération a réussi ou false dans le cas contraire.

Contient le premier mot de la dernière commande tapée dans la console.

$_ ou $PSitem

Contient l’objet courant transmis par le pipe |.

Récupérer le statut de la dernière commande

La variable automatique à utiliser est $?.

Nous allons créer une simple variable $variable.

PS C:\Users\damien.vanrobaeys> $env:variable = "test" 

Nous allons ensuite vérifier l’exécution de la commande.

PS C:\Users\damien.vanrobaeys> $? 
True 

Nous allons maintenant ajouter un second = à la déclaration de notre variable. Bien entendu, cela provoquera une erreur :

images/RI15_image3.png

Affichons maintenant le résultat de la dernière commande.

PS C:\Users\damien.vanrobaeys> $? 
False 

Prenons quelques exemples pour comprendre l’utilité des variables automatiques.

PS C:\Users\Jerome> $Jours = @("Lundi","Mardi","Mercredi", 
"Jeudi","Vendredi","Samedi") 
PS C:\Users\Jerome> $Jours | Where-Object {$Psitem -like "*edi"} 
Mercredi 
Vendredi 
Samedi 

 

PS C:\Users\Jerome> $Jours | Where-Object {$_ -like "*edi"} 
Mercredi 
Vendredi 
Samedi 

Récupérer la dernière valeur saisie

La variable à utiliser est $$.

Nous allons donc afficher son contenu.

PS C:\Users\damien.vanrobaeys> $$ 
$? 

Ces deux exemples...

La portée des variables

1. Qu’est-ce qu’une portée ?

La portée d’une variable nous permet de déterminer l’espace ou l’environnement d’exécution à partir duquel nous pouvons accéder au contenu de la variable. C’est-à-dire jusqu’à quel niveau la variable sera accessible : uniquement dans un script, accessible entre plusieurs scripts… Les étendues sont utiles pour protéger certains éléments d’un environnement contre des modifications réalisées involontairement par script ou fonction. Dès qu’un script ou une fonction PowerShell est exécutée, une nouvelle étendue est créée.

Les portées suivantes sont disponibles :

  • portée globale,

  • portée locale,

  • portée script.

2. Comment définir la portée d’une variable ?

La définition de la portée d’une variable se fait en utilisant la syntaxe suivante :

PS > $<Portée>:<nom de la variable> 

Dans l’exemple suivant, nous allons déclarer différentes variables avec différentes portées :

PS > $Global:var4 
PS > $Local:var5 
PS > $Script:var6 
PS > $private:var7 

3. Portée globale

a. À quoi correspond-elle ?

Il s’agit de la portée utilisée par défaut lors de l’ouverture d’une console PowerShell.

Cette portée est également utilisée par :

  • les variables automatiques,

  • les variables, alias, fonctions définis dans un profil PowerShell.

b. Déclaration de la portée

Pour déclarer la portée globale, il faudra ajouter le préfixe Global avant la variable. 

$Global:MaVariable = "Valeur" 

c. Jusqu’où va cette portée ?

Une variable globale sera visible par l’ensemble des autres scripts s’exécutant en même temps ainsi qu’à la fin de son exécution.

Prenons un script A utilisant des variables globales. Les variables globales du script A seront visibles et accessibles par tous les scripts (B, C…) s’exécutant au même moment que ce script ainsi qu’à la fin de l’exécution.

d. Comprendre son fonctionnement

Prenons...