La portée des variables
Sommaire
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 variable | Description |
---|---|
Global | La 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. |
Local | La 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. |
Script | La 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".
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.
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.