Tipp für Microsofts PowerShell

PowerShell - mit lokalen und globalen Variablen arbeiten

Beim Erstellen eines Skripts ist es oft hilfreich einzelne Programmteile als eine Funktion im Code anzulegen. Hier kann man in unerwartete Probleme mit Variablen geraten.

Lösung: Wie in fast jeder Programmiersprache, gibt es auch in der PowerShell die Unterscheidung zwischen lokalen und globalen Variablen beziehunsweise entsprechenden Unterformen. Eine, innerhalb eines Klammer-Blocks deklarierte, Variable überschreibt für den Klammer-Block eine außerhalb definierte Variable mit demselben Namen. Dies ist normal und auch so gewünscht.

Da in der Powershell das Zuweisen von Werten gleichbedeutend mit der Deklaration einer Variable ist, bekommt man jetzt allerdings ein Problem:

$variable = "test"

if($true) {

$variable = "neuer Test"

}

echo $variable

Echo gibt hier unerwarteter Weise test aus. Die äußere Variable $variable bekommt außerhalb des IF-Blocks den Wert test. Damit $variable auch eine neue Variable innerhalb des IF-Blocks instanziiert wird, wird der Wert neuer Test in die neue Variable und nicht in die außerhalb deklarierte Variable geschrieben. Die äußere Variable bleibt also unangetastet.

Um ein solches ungewolltes Dilemma zu vermeiden, kann man in der PowerShell den Zugriff konkret auf den globalen-Kontext legen. Anstatt mit $NAME legt man die Variablen mit $global:NAME an:

global:variable = "test"

if($true) {

$global:variable = "neuer Test"

}

echo $global:variable

Nun gibt echo wie gewünscht neuer Test aus.

Produkte: Dieser Tipp funktioniert mit den aktuellen Versionen der PowerShell. (mje)