Die Verwendung von PowerShell zum Festlegen von Windows-Umgebungsvariablen, zum Lesen von Umgebungsvariablen und zum Erstellen neuer Umgebungsvariablen ist einfach, sobald Sie den Trick kennen. Die Tricks, die Sie in diesem Artikel lernen, funktionieren sowohl für Windows 10-Umgebungsvariablen als auch für beliebige Windows-Clients/Server nach Windows 7 SP1/Windows Server 2008.
PowerShell bietet viele verschiedene Möglichkeiten, mit Windows-Umgebungsvariablen über das $env: PSDrive, die Registrierung und die .NET-Klasse [System.Environment] zu interagieren. Sie lernen jede Methode kennen, einschließlich des Verständnisses des Geltungsbereichs von Umgebungsvariablen, in dieser schrittweisen Anleitung.
Annahmen
In diesem Artikel verwende ich Windows PowerShell 5.1 unter Windows 10. Wenn Sie jedoch eine Version von Windows PowerShell ab v3 unter Windows 7 SP1 oder neuer haben, sollten die von mir gezeigten Techniken einwandfrei funktionieren.
Was sind Umgebungsvariablen?
Umgebungsvariablen speichern, wie der Name schon sagt, Informationen über die Umgebung, die von Windows und Anwendungen verwendet wird. Umgebungsvariablen können von grafischen Anwendungen wie dem Windows Explorer und einfachen Texteditoren wie Notepad sowie von cmd.exe und PowerShell abgerufen werden.
Die Verwendung von Umgebungsvariablen hilft Ihnen, das Festkodieren von Dateipfaden, Benutzer- oder Computernamen und vielem mehr in Ihren PowerShell-Skripts oder -Modulen zu vermeiden.
Gemeinsame Umgebungsvariablen
Wenn Sie mehr darüber erfahren, wie Sie mit Umgebungsvariablen in PowerShell arbeiten, stoßen Sie auf viele verschiedene Variablen. Einige sind nützlicher als andere. Nachfolgend finden Sie eine Liste einiger gängiger Umgebungsvariablen und ihrer Verwendung zur Referenz.
Variable | Usage |
---|---|
ClientName | The name of the remote computer connected via a Remote Desktop session. |
SessionName | This helps to identify if the current Windows session is regarded by the operating system as running at the console. For console sessions SessionName will be ‘Console’. Enhanced Session connections to Hyper-V Virtual Machines do not report SessionName as ‘Console’, whereas Standard Sessions do. |
ComputerName | The name of the computer. |
SystemRoot and Windir | The path to the current Windows installation. |
ProgramFiles and ProgramFiles(x86) | The default locations for x64 and x86 programs. |
ProgramW6432 | The default location for programs, avoiding 32/64 bit redirection. This variable only applies for 32 bit processes running on a 64 bit platform. This means that you can use it to identify when a 32 bit instance of PowerShell is running on a 64 bit system. |
UserDNSDomain | The Fully Qualified Domain Name of the Active Directory domain that the current user logged on to. Only present for domain logons. |
UserDomain | The NETBIOS-style name of the domain that the current user logged on to. Can be a computer name if there’s no domain. |
UserDomainRoamingProfile | The location of the central copy of the roaming profile for the user, if any. Only present for domain logons. |
UserName | The name of the currently logged on user. |
UserProfile | The location of the profile of the current user on the local computer. |
Umgebungsvariablenbereiche
Es gibt drei Bereiche von Umgebungsvariablen. Denken Sie an Bereiche als Ebenen von Variablen, die sich zu einem Gesamtbild zusammensetzen. Zusammen stellen diese „Ebenen“ vielen verschiedenen laufenden Prozessen in Windows Umgebungsvariablen bereit.
Umgebungsvariablenbereich „Hierarchie“
Jede dieser „Ebenen“ kombiniert oder überschreibt einander. Sie sind in einer Hierarchie wie folgt definiert: Rechner –> Benutzer –> Prozess, wobei jede bereichsspezifische Variable die Elternvariable überschreibt, sofern eine in der übergeordneten Ebene existiert.
Zum Beispiel ist eine häufige Umgebungsvariable TEMP
. Diese Variable speichert den Ordnerpfad zum lokalen temporären Ordner von Windows. Diese Umgebungsvariable ist wie folgt eingestellt:
C:\WINDOWS\TEMP
in the machine scopeC:\Users\<username>\AppData\Local\Temp
in the user scopeC:\Users\<username>\AppData\Local\Temp
in the process scope.
Wenn im Bereich Benutzer keine Umgebungsvariable TEMP
festgelegt ist, lautet das Endergebnis C:\WINDOWS\TEMP
.
Arten von Umgebungsvariablenbereichen
Es gibt drei verschiedene Umgebungsvariablenbereiche in Windows.
Rechner
Umgebungsvariablen im Bereich Rechner sind mit der laufenden Instanz von Windows verbunden. Jedes Benutzerkonto kann diese lesen, jedoch müssen zum Festlegen, Ändern oder Löschen erhöhte Berechtigungen verwendet werden.
Benutzer
Umgebungsvaiablen im Benutzer-Bereich sind mit dem Benutzer verknüpft, der den aktuellen Prozess ausführt. Benutzer-Variablen überschreiben maschinen-weite Variablen mit demselben Namen.
Hinweis: Microsoft empfiehlt, dass maschinen- und benutzerspezifische Umgebungsvariablenwerte nicht mehr als 2048 Zeichen enthalten.
Prozess
Umgebungsvariablen im Prozess-Bereich sind eine Kombination der maschinen– und benutzer-spezifischen Bereiche, zusammen mit einigen Variablen, die Windows dynamisch erstellt.
Nachfolgend finden Sie eine Liste der Umgebungsvariablen, die einem laufenden Prozess zur Verfügung stehen. Alle diese Variablen werden dynamisch erstellt.
ALLUSERSPROFILE
APPDATA
COMPUTERNAME
HOMEDRIVE
HOMEPATH
LOCALAPPDATA
LOGONSERVER
PROMPT
PUBLIC
SESSION
SystemDrive
SystemRoot
USERDNSDOMAIN
USERDOMAIN
USERDOMAIN_ROAMINGPROFILE
USERNAME
USERPROFILE
Umgebungsvariablen in der Registrierung
Umgebungsvariablen werden an zwei Stellen in der Registrierung gespeichert, einmal für den Benutzerbereich und einmal für den Maschinenbereich.
Verwenden Sie die Registrierung nicht zur Verwaltung von Umgebungsvariablen
Es gibt einen Haken, wenn Sie Änderungen an Variablen in der Registrierung vornehmen. Laufende Prozesse sehen keine Variablenänderungen in der Registrierung. Prozesse sehen nur die Registrierungsvariablen und -werte, die zum Zeitpunkt des Prozessstarts vorhanden waren, es sei denn, Windows benachrichtigt sie über eine Änderung.
Anstatt die Registrierung direkt zu bearbeiten, können Sie stattdessen eine .NET-Klasse verwenden. Die .NET-Klasse [System.Environment]
kann maschinen- und benutzer–spezifische Umgebungsvariablen ändern und die Registrierungspflege für Sie übernehmen.
Die direkte Bearbeitung von Umgebungsvariablen in der Registrierung ergibt keinen Sinn. Die .NET-Klasse bietet einen einfacheren, von Microsoft unterstützten Ansatz. Sie werden später in diesem Artikel erfahren, wie Sie die .NET-Klasse [System.Environment]
verwenden können.
Umgebungsvariablen-Registrierungsorte und Abfragen
I hope you’ve been convinced to not modify the registry directly but if you’d like to take a peek at what’s in there, you can find all user environment variables in the HKEY_CURRENT_USER\Environment
key. Machine-scoped environment variables are stored at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
.
In einem dieser Schlüssel befinden sich Registrierungswerte vom Typ REG_SZ
oder REG_EXPAND_SZ
. REG_EXPAND_SZ
-Werte enthalten Umgebungsvariablen, die als Teil ihres Werts eingebettet sind. Diese Umgebungsvariablen werden beim Abrufen des Werts erweitert.
Um dies zu demonstrieren, verwenden Sie das Dienstprogramm REG
. Dies ist ein kleines Befehlszeilen-Dienstprogramm, das mit Windows geliefert wird.
Fragen Sie die Umgebungsvariable TEMP
wie unten gezeigt ab. Führen Sie REG
mit dem Parameter QUERY
aus, um den Wert der Variablen TEMP
abzurufen.
Manchmal werden Umgebungsvariablen von Prozentzeichen umgeben angezeigt (
%COMPUTERNAME%
), wie oben gezeigt. Dies ist die alte Methode, um Umgebungsvariablen über cmd.exe und Batch-Dateien anzuzeigen. Beachten Sie, dass PowerShell dieses Format nicht erkennt.
Das Dienstprogramm REG
ermöglicht es uns, den nativen Wert des Registrierungswerts zu sehen. Der Werttyp ist REG_EXPAND_SZ
und der Wert enthält die Umgebungsvariable %USERPROFILE%
.
Wenn Sie PowerShell verwenden möchten, um den Registrierungswert abzurufen, können Sie dies mit dem Get-Item
-Befehl wie unten gezeigt tun.
Anzeigen und Festlegen von Windows-Umgebungsvariablen über die GUI
Um eine GUI-Ansicht der Benutzer- und Systemumgebungsvariablen anzuzeigen, führen Sie SystemPropertiesAdvanced.exe von PowerShell, einer Eingabeaufforderung oder über die Tastenkombination Windows-Taste+R aus, um den Erweiterte Systemeigenschaften-Tab anzuzeigen. Klicken Sie auf die Schaltfläche Umgebungsvariablen, die im folgenden Bild hervorgehoben ist.

Der Dialog „Umgebungsvariablen“, wie unten dargestellt, ermöglicht es Ihnen, Benutzer- und maschinenbezogene Umgebungsvariablen anzuzeigen, zu erstellen und zu ändern. Beachten Sie, dass der Dialog maschinenbezogene Variablen als Systemvariablen bezeichnet.

Jetzt, da Sie ein Verständnis für Umgebungsvariablen haben, kommen wir zu dem, wofür Sie hier sind, der Verwaltung mit PowerShell!
Es gibt verschiedene Möglichkeiten, wie Sie mit Umgebungsvariablen in PowerShell interagieren können.
- Der
Env:
PSDrive und Provider – Sitzungsbasiert. Legt nur die Werte der Umgebungsvariablen für die aktuelle PowerShell-Sitzung fest $env:
Variablen – Sitzungsbasiert. Legt nur die Werte der Umgebungsvariablen für die aktuelle PowerShell-Sitzung fest- Die
[System.Environment]
.NET-Klasse – ermöglicht das Speichern von benutzer- und systemweiten Umgebungsvariablen über Sitzungen und Neustarts hinweg
Der Env:
PSDrive und Provider
Einer der besten Wege, um Umgebungsvariablen zu lesen, ist ein PowerShell-Konzept, das als PowerShell-Drives (PS-Drives) bekannt ist. Ein PS-Drive ermöglicht es Ihnen, Umgebungsvariablen so zu behandeln, als wären sie ein Dateisystem über das Laufwerk Env:
.
Wechseln zum Env:
Drive
Wie bei allen PS-Drives verweisen Sie darauf über Pfade wie Env:\TEMP
, Env:\COMPUTERNAME
, usw. Aber um Tastenanschläge zu sparen, wechseln Sie zum Laufwerk Env:
, wie Sie es bei jedem Dateisystemlaufwerk tun würden, wie unten gezeigt.
Tab-Vervollständigung mit dem Env:
Drive
Sie können dieselben Befehle verwenden, die Sie verwenden würden, um auf ein Dateisystem zuzugreifen, wie z. B. Get-Item
und Get-ChildItem
, um auf Umgebungsvariablen zuzugreifen. Aber anstelle des Dateisystems lesen Sie das Env:
-Laufwerk.
Da Umgebungsvariablen in einem PS-Laufwerk gespeichert sind, können Sie die Funktion zur automatischen Vervollständigung von PowerShell verwenden, um die verfügbaren Variablen durchzugehen, wie unten gezeigt.

Lassen Sie uns nun ein paar Beispiele dafür sehen, wie Sie das Env:
-Laufwerk verwenden können, um mit Umgebungsvariablen zu arbeiten.
Auflisten von Umgebungsvariablen mit Env:
Auflisten von Umgebungsvariablen mit Wildcards mit Env:
Auffinden von Umgebungsvariablenwerten mit Env:
Die Ergebnisse dieser Befehle sind Schlüssel/Wert-Objekte des .NET-Typs [System.Collections.DictionaryEntry]
. Diese Objekte enthalten den Namen der Umgebungsvariable in der Eigenschaft Name
und den Wert in der Eigenschaft Value
.
Sie können auf einen bestimmten Wert einer Umgebungsvariable zugreifen, indem Sie den Verweis auf den Get-Item
-Befehl in Klammern setzen und auf die Eigenschaft Value
verweisen, wie unten gezeigt:
In Situationen, in denen Sie nur bestimmte Umgebungsvariablen zurückgeben müssen, verwenden Sie standardmäßige PowerShell-Cmdlets wie Select-Object
und Where-Object
, um die von dem Env:
-Provider zurückgegebenen Objekte auszuwählen und zu filtern.
Im folgenden Beispiel wird nur die Umgebungsvariable COMPUTERNAME
zurückgegeben.
Alternativ können Sie das Cmdlet Get-Content
verwenden. Dieses Cmdlet gibt ein [String]
-Objekt zurück, das den Wert der Umgebungsvariable enthält. Dieses Objekt ist einfacher zu handhaben, da es nur den Wert zurückgibt und nicht ein Objekt mit den Eigenschaften Name
und Value
.
Demo: Einfügen von Umgebungswerten in einen String
Mit Get-Content
können Sie den Wert einer Umgebungsvariable finden und beispielsweise die Umgebungsvariable COMPUTERNAME
in einen Textstring einfügen.
Setzen einer Umgebungsvariable (und Erstellen) mit Env:
Erstellen Sie neue Umgebungsvariablen mit PowerShell mithilfe des Cmdlets New-Item
. Geben Sie den Namen der Umgebungsvariable in der Form Env:\<EnvVarName>
für den Wert Name
und den Wert der Umgebungsvariable für den Parameter Value
an, wie im folgenden Beispiel gezeigt.
Verwenden Sie das Set-Item
-Cmdlet, um eine Umgebungsvariable festzulegen oder eine neue zu erstellen, falls sie noch nicht vorhanden ist. Sie können unten sehen, dass Sie mit dem Set-Item
-Cmdlet sowohl eine Umgebungsvariable erstellen oder ändern können.
Kopieren einer Umgebungsvariable mit Env:
Manchmal ergibt sich die Situation, dass Sie den Wert einer Umgebungsvariable replizieren müssen. Sie können dies mit dem Copy-Item
-Cmdlet tun.
Unten können Sie sehen, dass der Wert der Variablen COMPUTERNAME
in MYCOMPUTER
kopiert wird und dabei den vorhandenen Wert überschreibt.
Entfernen einer Umgebungsvariable mit Env:
Es wird Situationen geben, in denen eine Umgebungsvariable nicht mehr benötigt wird. Sie können Umgebungsvariablen mit einer der folgenden Methoden entfernen:
- Verwenden Sie das
Set-Item
-Cmdlet, um einer Umgebungsvariable einen leeren Wert zuzuweisen
- Verwenden Sie das
Remove-Item
-Cmdlet.
- Verwenden Sie das
Clear-Item
-Cmdlet.
Umbenennen einer Umgebungsvariable mit Env:
In Situationen, in denen der Name einer Umgebungsvariable geändert werden muss, haben Sie die Möglichkeit, diese mit dem Env:
-Anbieter umzubenennen, anstatt sie zu löschen und neu zu erstellen.
Verwenden Sie das Rename-Item
-Cmdlet, um den Namen einer Umgebungsvariablen zu ändern, während ihr Wert beibehalten wird. Unten sehen Sie, dass die Variable MYCOMPUTER
in OLDCOMPUTER
umbenannt wird, während ihr Wert erhalten bleibt.
$Env:
Variablen
Nachdem Sie das Env:
-Laufwerk beherrschen, um Umgebungsvariablen wie Dateien zu behandeln, zeigt Ihnen dieser Abschnitt, wie Sie sie als Variablen behandeln können. Eine weitere Möglichkeit, Sitzungs-Umgebungsvariablen zu verwalten, ist die Verwendung des Powershell-Ausdruck-Analysators. Mit dieser Funktion können Sie auf Umgebungsvariablen über den $Env:
-Bereich zugreifen.
Abrufen einer Umgebungsvariable mit $Env:
Mit dem $Env
-Bereich können Sie direkt auf Umgebungsvariablen verweisen, ohne ein Kommando wie Get-Item
zu verwenden, wie unten gezeigt.
Mit dieser Methode können Sie Umgebungsvariablen einfach in Zeichenketten einfügen, wie unten gezeigt.
Setzen oder Erstellen einer Umgebungsvariable mit $Env:
Das Setzen einer Umgebungsvariable mit dieser Methode ist unkompliziert. Dadurch wird auch eine neue Umgebungsvariable erstellt, wenn sie noch nicht vorhanden ist, wie unten gezeigt.
Verwenden Sie die +=
-Syntax, um einen bestehenden Wert zu erweitern, anstatt ihn zu überschreiben.
Entfernen einer Umgebungsvariable mit $Env:
Um eine Umgebungsvariable mit dieser Methode zu entfernen, setzen Sie einfach ihren Wert auf eine leere Zeichenkette.
Verwendung der [System.Environment]
.NET Klasse
Die .NET Klasse [System.Environment]
bietet Methoden zum Abrufen und Setzen von Umgebungsvariablen. Dies ist die einzige Methode, um auf verschiedene Umgebungsbereiche direkt zuzugreifen und Umgebungsvariablen zu setzen, die über PowerShell-Sitzungen hinweg bestehen bleiben.
In allen folgenden Beispielen wird, wenn kein Bereich angegeben ist, vom Prozessbereich ausgegangen.
Bei der Verwendung von [System.Environment]
verwenden Sie einige verschiedene Methoden der .NET statischen Klasse. Sie müssen nicht verstehen, was eine statische Methode ist. Sie müssen nur verstehen, dass Sie für die Verwendung einer der Techniken, die Sie gleich lernen werden, zuerst die Klasse ([System.Environment]
) referenzieren müssen, gefolgt von zwei Doppelpunkten (::
), dann gefolgt von der Methode.
Auflistung von Umgebungsvariablen mit [System.Environment]
Wenn Sie alle Umgebungsvariablen in einem bestimmten Bereich sehen möchten, verwenden Sie die Methode GetEnvironmentVariables
. Diese Methode gibt alle Umgebungsvariablen zurück, die als Methode Argument (in Klammern) spezifiziert sind.
Einzelne Umgebungsvariablen mit [System.Environment]
abrufen
Wenn Sie eine bestimmte Umgebungsvariable finden müssen, können Sie dies auf zwei verschiedene Arten tun.
GetEnvironmentVariables().<var name>
– nicht empfohlenGetEnvironmentVariable('<var name>','<scope>')
GetEnvironmentVariables()
Mit der Methode GetEnvironmentVariables()
verwenden Sie die Punktnotation, um auf den Wert zuzugreifen. Schließen Sie die Referenz auf die Klasse und die statische Methode [System.Environment]
in Klammern ein, gefolgt von einem Punkt und dem Namen der Umgebungsvariable, wie unten gezeigt:
Beachten Sie, dass Sie bei der Verwendung dieser Methode sicherstellen müssen, dass Sie die Groß- und Kleinschreibung beachten! Versuchen Sie im obigen Beispiel, die Variable
APPDATA
mitappdata
zu referenzieren. Verwenden Sie stattdessen die MethodeGetEnvironmentVariable()
.
GetEnvironmentVariable()
Verwenden Sie anstelle der Methode GetEnvironmentVariables()
die Methode GetEnvironmentVariable()
, um einzelne Umgebungsvariablen zu finden. Diese Methode umgeht das Problem mit der Groß- und Kleinschreibung und ermöglicht es Ihnen auch, den Geltungsbereich anzugeben.
Verwenden Sie für diese Methode den Namen der Umgebungsvariable und den gewünschten Geltungsbereich, die durch ein Komma getrennt sind.
Setzen einer Umgebungsvariable mit [System.Environment]
Verwenden Sie die Methode SetEnvironmentVariable()
, um den Wert einer Umgebungsvariable für den angegebenen Geltungsbereich festzulegen oder eine neue zu erstellen, falls sie noch nicht existiert.
Beim Setzen von Variablen im Prozessbereich wirst du feststellen, dass der Prozessbereich volatil ist, während Änderungen an den Benutzer- und Maschinenbereichen permanent sind.
Hinweis: Das Aufrufen der Methode SetEnvironmentVariable mit einem Variablennamen oder Wert von 32767 Zeichen oder mehr führt dazu, dass eine Ausnahme geworfen wird.
Entfernen einer Umgebungsvariable mit [System.Environment]
Verwende die Methode SetEnvironmentVariable()
, um eine Umgebungsvariable für den angegebenen Bereich zu entfernen, indem du ihren Wert auf einen leeren String setzt.
Nützliche PowerShell-Umgebungsvariablen
Wie viele andere Windows-Anwendungen hat PowerShell einige eigene Umgebungsvariablen. Zwei nützliche Umgebungsvariablen sind PSExecutionPolicyPreference
und PSModulePath
.
PSExecutionPolicyPreference
Die Umgebungsvariable PSExecutionPolicyPreference
speichert die aktuelle PowerShell-Ausführungsrichtlinie. Sie wird erstellt, wenn eine sitzungsspezifische PowerShell-Ausführungsrichtlinie festgelegt wird durch:
- Ausführen des Cmdlets
Set-ExecutionPolicy
mit einemScope
-Parameter vonProcess
- Ausführen der ausführbaren Datei
powershell.exe
, um eine neue Sitzung zu starten, wobei der BefehlszeilenparameterExecutionPolicy
verwendet wird, um eine Richtlinie für die Sitzung festzulegen.
PSModulePath
Die Umgebungsvariable PSModulePath
enthält den Pfad, den PowerShell nach Modulen durchsucht, wenn kein vollständiger Pfad angegeben ist. Sie ist ähnlich aufgebaut wie die Standard-Umgebungsvariable PATH
, mit einzelnen Verzeichnispfaden, die durch ein Semikolon getrennt sind.
Quick-Tipp: Trennen Sie jeden Ordner, um ein Zeichenarray zu erhalten, um jeden Pfad einzeln mit $env:PSModulePath.split(‘;’) zu verarbeiten.
Zusammenfassung
Umgebungsvariablen sind eine nützliche Methode, um Informationen über ein laufendes System zu erhalten oder Informationen über Sitzungen und Neustarts hinweg zu speichern. Egal, ob Sie die standardmäßigen Windows-Betriebssystemumgebungsvariablen lesen oder Ihre eigenen erstellen, Sie können sie jetzt mit PowerShell auf verschiedene Arten verwalten!
Weitere Informationen
- about_Environment_Variables
- Die .NET-Klasse [System.Environment] in der Microsoft-Dokumentation
- Erlernen Sie das Formatieren von Zeichenketten und das Erweitern von Zeichenketten in PowerShell
Source:
https://adamtheautomator.com/powershell-environment-variables/