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”)