15/11/2024

La portée des variables

I. Présentation

Dans ce chapitre, nous allons évoquer la portée des variables PowerShell, car au-delà d'avoir un type, les variables ont une portée, ce qui signifie qu'elles sont accessibles uniquement dans certaines parties de votre script.

Par défaut, une variable est accessible dans tout le script où elle a été déclarée, et même au-delà puisqu'elle est accessible dans la session PowerShell dans son ensemble, mais ce ne sera pas forcément votre souhait pour toutes les variables.

II. Les différentes portées pour les variables

PowerShell prend en charge 3 types de portée différents pour ses variables : globale, locale, et script. Il y a aussi les variables privées, mais ce n'est pas une portée réellement.

Chaque variable PowerShell est associée à une portée. Voici un tableau récapitulatif :

Portée de variableDescription
GlobalLa variable est accessible partout dans la session PowerShell, y compris en dehors du script actuel. C'est la portée par défaut pour les variables créées dans une console PowerShell. Elle est également associée aux variables automatiques.
LocalLa variable est accessible uniquement à l'intérieur de la fonction ou du script où elle a été définie. C'est la portée attribuée par défaut à une variable dans un script (à moins qu'un nom de portée soit indiqué). Lorsque le script a terminé son exécution, la variable est inaccessible.
ScriptLa variable est accessible partout dans le script actuel, mais pas en dehors de celui-ci.

III. Attribuer une portée à une variable

Pour attribuer une portée explicitement à une variable, vous devez utiliser la syntaxe suivante :

$<Nom de la portée>:<Nom de la variable>

Vous remarquerez qu'il y a toujours le dollar en préfixe, mais que le choix de la portée via s'intercaler entre ce symbole et le nom de la variable.

Ce qui donne :

$Global:VariableGlobale
$Local:VariableLocale
$Script:VariableScript

IV. Exemples

Pour mettre en pratique cette notion de portée avec les variables PowerShell, nous allons découvrir les portées "Global" et "Script".

A. Portée globale

Une variable avec la portée "Global" est accessible entre plusieurs scripts. Nous allons le vérifier grâce à la création de deux scripts. Un premier script où la variable est déclarée et où nous allons afficher la variable dans la console, et un second script qui va simplement afficher le contenu de la variable.

  • Script-1.ps1
$global:Texte = "Hello World"
Write-Host $Texte
  • Script-2.ps1
Write-Host $Texte

Si nous exécutons le premier script, puis le second, nous pouvons voir que les deux scripts ont eu accès au contenu de la variable. Ceci est possible, car nous utilisons une variable associée à la portée "Global".

PowerShell - Variables - Portée globale

B. Portée Script

Nous allons effectuer le même exercice qu'avec la portée "Global" mais en utilisant la portée "Script" (avec "Local", le comportement serait identique dans le cas présent). Ainsi, nous allons créer deux scripts.

  • Script-3.ps1
$script:TexteScript = "Hello World"
Write-Host $TexteScript
  • Script-4.ps1
Write-Host $TexteScript

Nous exécutons le premier script, où est déclarée la variable "$TexteScript", puis le second. Cette fois-ci, la commande "Write-Host" retourne une chaine vide. Ceci montre bien que la variable "$TexteScript" n'est pas accessible entre plusieurs scripts.

PowerShell - Variables - Portée Script

Nous n'allons pas comparer les portées "Script" et "Local" dans ce chapitre, car nous n'avons pas encore abordé la notion de fonction PowerShell.

V. Conclusion

Bien qu'il ne soit pas toujours nécessaire de jouer sur la portée des variables PowerShell, cette notion est à connaître notamment lorsque l'on écrit des scripts, des modules et des fonctions. Bien souvent, nous utilisons la portée "Global" pour étendre l'accessibilité d'une variable spécifique.


livre pour apprendre PowerShell
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.