Utiliser la portée des variables dans les scripts Windows PowerShell

Effectué

Vous pouvez vous attendre à ce que la $computer variable que vous définissez à l’intérieur d’une fonction soit accessible dans le script une fois la fonction terminée. Ce n’est pas le cas. Les variables ont une étendue spécifique qui limite leur interaction avec d’autres étendues.

Le tableau suivant décrit les trois portées et comment elles affectent l’utilisation des variables.

Tableau 1 : Étendues

Étendue Description
Mondial Les variables définies à l’invite PowerShell sont disponibles pour tous les scripts démarrés à partir de cette invite, mais pas à d’autres invites ou instances ISE.
Scénario Les variables définies dans un script sont disponibles pour toutes les fonctions de ce script. Si vous créez une variable d’étendue de script portant le même nom qu’une variable globale, PowerShell crée une variable dans l’étendue du script et la valeur de l’étendue du script est prioritaire.
Fonction Les variables définies dans une fonction ne sont pas partagées avec d’autres fonctions ni avec le script. Si vous créez une variable d’étendue de fonction portant le même nom qu’une variable globale ou de script, PowerShell crée une variable dans l’étendue de la fonction.

Remarque

Le Windows PowerShell ISE n’est plus en développement de fonctionnalités actif et prend uniquement en charge Windows PowerShell 5.1 et versions antérieures. Pour le nouveau développement de scripts, Visual Studio Code avec l’extension PowerShell est l’environnement de script recommandé.

Remarque

Évitez d’utiliser le même nom de variable dans différentes étendues.

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"

Évitez de modifier des variables d'un contexte à l'autre, car cela peut entraîner de la 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.