about_Ref

Kurze Beschreibung

Beschreibt, wie eine Verweistypvariable erstellt und verwendet wird. Sie können Referenztypvariablen verwenden, damit eine Funktion den Wert einer Variablen ändern kann, die an sie übergeben wird.

Lange Beschreibung

Sie können Variablen per Verweis oder Wert an Funktionen übergeben.

Wenn Sie eine Variable nach Wert übergeben, übergeben Sie eine Kopie der Daten.

Im folgenden Beispiel ändert die Funktion den Wert der an sie übergebenen Variablen. In PowerShell sind ganze Zahlen Werttypen, sodass sie nach Wert übergeben werden. Daher ist der Wert von $var außerhalb des Gültigkeitsbereichs der Funktion unverändert.

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

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

Im folgenden Beispiel wird eine Variable mit einer Hashtable Funktion übergeben. Hashtableist ein Objekttyp, sodass er standardmäßig per Verweis an die Funktion übergeben wird.

Beim Übergeben einer Variablen anhand eines Verweises kann die Funktion die Daten ändern und diese Änderung nach ausführung der Funktion beibehalten werden.

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

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

Die Funktion fügt ein neues Schlüssel-Wert-Paar hinzu, das außerhalb des Bereichs der Funktion beibehalten wird.

Schreiben von Funktionen zum Akzeptieren von Referenzparametern

Sie können Ihre Funktionen so codieren, dass ein Parameter als Verweis verwendet wird, unabhängig vom übergebenen Datentyp. Dies erfordert, dass Sie den Parametertyp als System.Management.Automation.PSReference, oder [ref].

Bei Verwendung von Verweisen müssen Sie die Value Eigenschaft des System.Management.Automation.PSReference Typs verwenden, um auf Ihre Daten zuzugreifen.

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

Um eine Variable an einen Parameter zu übergeben, der einen Verweis erwartet, müssen Sie die Variable als Verweis umwandeln.

Hinweis

Die Klammern und Klammern sind BEIDE erforderlich.

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

Übergeben von Verweisen auf .NET-Methoden

Bei einigen .NET-Methoden müssen Sie möglicherweise eine Variable als Verweis übergeben. Wenn die Definition der Methode die Schlüsselwort (keyword)s in, outoder ref für einen Parameter verwendet, erwartet sie einen Verweis.

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

Die TryParse Methode versucht, eine Zeichenfolge als ganze Zahl zu analysieren. Wenn die Methode erfolgreich verläuft, wird sie zurückgegeben$true, und das Ergebnis wird in der Variablen gespeichert, die Sie per Verweis übergeben haben.

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

Verweise und Bereiche

Verweise ermöglichen es, den Wert einer Variablen im übergeordneten Bereich innerhalb eines untergeordneten Bereichs zu ändern.

# 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

Nur die Variable des Verweistyps wurde geändert.

Weitere Informationen