PowerShell,  Windows

Umgebungsvariablen in der PowerShell

Abfragen von Umgebungsvariablen
Die Anzeige der Umgebungsvariablen war in der “alten” Kommandozwile (cmd) einfach per env durchzuführen.

Die PowerShell bietet einen ähnlich einfachen Aufruf mit Get-ChildItem oder per Alias gci. Zu beachten ist, dass Get-ChildItem einen Pfad erwartet:

Get-ChildItem env:

Eine bestimmte Variable kann mit env: abgefragt werden:

gci env:PATH

Einfacher kann die Variable auch wie jeder Variable in Powershell angezeogt werden.

$Env:Path

Dieser Weg eignet sich besonders gut für Skripte. An dieser Stelle zeigt die PowerShell ihre Stärke. Die Variable kann mit Zeichenkettenoperationen weiter verarbeitet werden, da es ein STRING Objekt ist. Beispielsweise kann -replace zum Bearbeiten von Teilen der Variable verwendet werden:

$Env:myVar=”Toast”
$Env:myVar

Toast

$Env:myVar = $Env:myVar -replace(“oa”,”e”)
Env:myVar

Test
 
Setzen und Ändern von Umgebungsvariablen
Eine Umgebungsvariable kann einfach über eine Zuweisung mit “=” gesetzt oder überschrieben werden:

$env:myVar=”D:\TEMP”
gci env:myVar

Möchte man an eine bestehende Variable etwas anhängen, geschieht dies per +=:

Name Value
—- —–
myVar D:\TEMP

Achtung: Bei der Verknüpfung ist die Syntax selbst korrekt anzugeben. Pfad Variablen (wie $env:PATH) erwarten oft ein “;” als Trennzeichen.

$env:myVar+=”;D:\Cache”
gci env:myVar

Name Value
—- —–
myVar D:\TEMP;D:\Cache

Achtung: Diese Variablen sind nur auf Prozessebene, also in der aktuellen Sitzung gesetzt. Um eine Variable dauerhaft zu setzen, ist auf die Funktionen des .NET Frameworks zurückzugreifen.

[Environment]::SetEnvironmentVariable(“myVar”, “TestWert”, “User”)

Der obige Befehl setzt oder überschreibt die Variable myVar mit dem Wert “TestWert” dauerhaft in der Umgebung des Benutzers. Der dritte Parameter bietet die folgenden Optionen:

  • User (Benutzer-Ebene) – Die Variable wird dauerhaft für diesen Benutzer gesetzt.
  • Machine (Maschinen-Ebene = System) – gültig für alle Benutzer des Systems. Dieser Aufruf erfordert adminsitrative Berechtigungen.
  • Process (Process-Ebene) – Das ist der Standard und entspricht dem Verhalten von $env:myVar

[Environment]::GetEnvironmentVariable(“myVar”, “machine”)

TestWert

Löschen von Umgebungsvariablen

Remove-Item env:myVar
gci env:myVar

gci : Der Pfad “myVar” kann nicht gefunden werden, da er nicht vorhanden ist.
In Zeile:1 Zeichen:1
+ gci env:myVar
+ ~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (myVar:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Das Löschen von Variablen auf System-Ebene (“machine”) oder Benutzer-Ebene (“User”) erfolgt mit dem .NET Aufruf:

[Environment]::SetEnvironmentVariable(“myVar”,$null,”Machine”)