about_Ref

Description courte

Décrit comment créer et utiliser une variable de type référence. Vous pouvez utiliser des variables de type référence pour permettre à une fonction de modifier la valeur d’une variable qui lui est transmise.

Description longue

Vous pouvez passer des variables à des fonctions par référence ou par valeur.

Lorsque vous passez une variable par valeur, vous transmettez une copie des données.

Dans l’exemple suivant, la fonction modifie la valeur de la variable qui lui est passée. Dans PowerShell, les entiers sont des types valeur afin qu’ils soient passés par valeur. Par conséquent, la valeur de $var n’est pas modifiée en dehors de l’étendue de la fonction.

Function Test($data)
{
    $data = 3
}

$var = 10
Test -data $var
$var
10

Dans l’exemple suivant, une variable contenant un Hashtable est passée à une fonction. Hashtable est un type d’objet, par défaut, il est passé à la fonction par référence.

Lors de la transmission d’une variable par référence, la fonction peut modifier les données et cette modification persiste après l’exécution de la fonction.

Function Test($data)
{
    $data.Test = "New Text"
}

$var = @{}
Test -data $var
$var
Name                           Value
----                           -----
Test                           New Text

La fonction ajoute une nouvelle paire clé-valeur qui persiste en dehors de l’étendue de la fonction.

Écriture de fonctions pour accepter les paramètres de référence

Vous pouvez coder vos fonctions pour prendre un paramètre comme référence, quel que soit le type de données transmis. Cela nécessite que vous spécifiiez le type de paramètres en tant que System.Management.Automation.PSReference, ou [ref].

Lorsque vous utilisez des références, vous devez utiliser la Value propriété du System.Management.Automation.PSReference type pour accéder à vos données.

Function Test([ref]$data)
{
    $data.Value = 3
}

Pour passer une variable à un paramètre qui attend une référence, vous devez taper caster votre variable en tant que référence.

Remarque

Les crochets et parenthèses sont obligatoires.

$var = 10
Test -data ([ref]$var)
$var
3

Passage de références à des méthodes .NET

Certaines méthodes .NET peuvent nécessiter que vous transmettiez une variable en tant que référence. Lorsque la définition de la méthode utilise les mot clé in, outou ref sur un paramètre, elle attend une référence.

[int] | Get-Member -Static -Name TryParse
Name     MemberType Definition
----     ---------- ----------
TryParse Method     static bool TryParse(string s, [ref] int result)

La TryParse méthode tente d’analyser une chaîne sous forme d’entier. Si la méthode réussit, elle retourne $trueet le résultat est stocké dans la variable que vous avez passée par référence.

PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15

Références et étendues

Les références permettent de modifier la valeur d’une variable dans l’étendue parente dans une étendue enfant.

# Create a value type variable.
$i = 0
# Create a reference type variable.
$iRef = [ref]0
# Invoke a scriptblock to attempt to change both values.
&{$i++;$iRef.Value++}
# Output the results.
"`$i = $i;`$iRef = $($iRef.Value)"
$i = 0;$iRef = 1

Seule la variable du type référence a été modifiée.

Voir aussi