Utiliser la portée des variables dans les scripts Windows PowerShell
Intuitivement, vous partez du principe que la variable nommée $computer que vous définissez dans une fonction est accessible dans le script quand la fonction est terminée. Toutefois, ce n’est pas le cas. Les variables ont une portée spécifique et sont limitées dans leur façon d’interagir d’une portée à une autre.
Le tableau suivant décrit les trois portées et comment elles affectent l’utilisation des variables.
Tableau 1 : Étendues
| Étendue | Description |
|---|---|
| Mondial | La portée globale est destinée à l’invite Windows PowerShell. Les variables définies au niveau de l’invite Windows PowerShell peuvent être examinées dans tous les scripts démarrés à partir de cette invite Windows PowerShell. Les variables créées au niveau d’une invite Windows PowerShell n’existent pas dans d’autres invites Windows PowerShell ni dans des instances de Windows PowerShell ISE (Environnement d’écriture de scripts intégré de Windows PowerShell). |
| Scénario | La portée d’un script concerne un seul script. Les variables définies au sein d’un script peuvent être examinées par toutes les fonctions incluses dans ce script. Si vous définissez une valeur de variable dans la portée du script qui existe déjà dans la portée globale, une nouvelle variable est créée dans la portée du script. Il existe alors deux variables du même nom dans deux portées distinctes. À ce stade, quand vous passez en revue la valeur de la variable dans le script, celle de la portée du script est retournée. |
| Fonction | La portée d’une fonction concerne une seule fonction. Les variables définies dans une fonction ne sont pas partagées avec d’autres fonctions ni avec le script. Si vous définissez une valeur de variable dans la portée d’une fonction qui existe déjà dans la portée globale ou la portée du script, une nouvelle variable est créée dans la portée de la fonction. Il existe alors deux variables du même nom dans deux portées distinctes. |
Remarque
Pour éviter toute confusion, une bonne pratique consiste à éviter d’utiliser les mêmes noms de variables dans des portées différentes.
En plus de passer en revue une variable dans une portée plus grande, vous pouvez aussi modifier cette variable en référençant spécifiquement sa portée quand vous la modifiez. Pour modifier une variable de portée de script à partir d’une fonction, utilisez la syntaxe suivante :
$script:var = "Modified from function"
Une bonne pratique consiste à éviter de modifier des variables d’une portée à une autre, car cela peut porter à confusion. Définissez plutôt la variable de portée de script égale à la sortie de la fonction. Si les données de la fonction se trouvent dans une variable, vous pouvez utiliser Return() pour la transmettre au script.
Voici un exemple d’utilisation de Return() à la fin d’une fonction pour passer une valeur de variable à l’étendue du script :
Return($users)
Remarque
L’utilisation de Return() dans une fonction ajoute les données spécifiées au pipeline de données retournées, mais ne remplace pas les données existantes dans le pipeline. Dans le cadre du développement d’un script, vous avez besoin de vérifier exactement quelles données sont retournées par une fonction.