Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
PowerShell erlaubt die Nutzung von Zuweisungen innerhalb von Ausdrücken, indem Sie die Zuweisung in Klammern ()
einschließen. PowerShell leitet den zugewiesenen Wert weiter. Beispiel:
# In an `if` conditional
if ($foo = Get-Item $PROFILE) { "$foo exists" }
# Property access
($profileFile = Get-Item $PROFILE).LastWriteTime
# You can even *assign* to such expressions.
($profileFile = Get-Item $PROFILE).LastWriteTime = Get-Date
Hinweis
Obwohl diese Syntax zulässig ist, wird von der Verwendung abgeraten. Es gibt Fälle, in denen die Weiterleitung nicht funktioniert, und es kann für andere Codeprüfer verwirrend sein, die Absicht des Codeautors zu erkennen.
Einschränkungen
Der Zuweisungsfall funktioniert nicht immer. Wenn er nicht funktioniert, wird die Zuweisen verworfen. Wenn Sie eine Instanz eines veränderlichen Werttyps erstellen und versuchen, die Instanz in einer Variablen zu speichern und gleichzeitig eine der Eigenschaften im gleichen Ausdruck zu verändern, wird die Eigenschaftszuweisung verworfen.
# create mutable value type
PS> Add-Type 'public struct Foo { public int x; }'
# Create an instance, store it in a variable, and try to modify its property.
# This assignment is effectively IGNORED.
PS> ($var = [Foo]::new()).x = 1
PS> $var.x
0
Der Unterschied ist, dass Sie keinen Verweis auf den Wert zurückgeben können. ($var = [Foo]::new())
entspricht im Wesentlichen $($var = [Foo]::new(); $var)
. Sie führen keinen Memberzugriff mehr auf die Variable aus, sondern Sie führen einen Memberzugriff auf die Ausgabe der Variable aus, was eine Kopie ist.
Die Problemumgehung ist, zuerst die Instanz zu erstellen und in einer Variablen zu speichern und anschließend die Eigenschaft mithilfe der Variablen zuzuweisen:
# create mutable value type
PS> Add-Type 'public struct Foo { public int x; }'
# Create an instance and store it in a variable first
# and then modify its property via the variable.
PS> $var = [Foo]::new()
PS> $var.x = 1
PS> $var.x
1