Über Umgebungsvariablen
- 22.09.2020
- 8 Minuten zu lesen
-
- S
- r
- s
- d
- c
-
+1
- Bereich „Maschine“ (oder „System“)
- Bereich „Benutzer“
- Bereich „Prozess“
KURZBESCHREIBUNG
Beschreibt den Zugriff auf Windows-Umgebungsvariablen in PowerShell.
LANGBESCHREIBUNG
Umgebungsvariablen speichern Informationen über die Umgebung des Betriebssystems. Diese Informationen umfassen Details wie den Betriebssystempfad, die Anzahl der vom Betriebssystem verwendeten Prozessoren und den Speicherort von temporären Ordnern.
Die Umgebungsvariablen speichern Daten, die vom Betriebssystem und anderen Programmen verwendet werden. Zum Beispiel enthält die Umgebungsvariable WINDIR
den Ort des Windows-Installationsverzeichnisses. Programme können den Wert dieser Variablen abfragen, um festzustellen, wo sich die Windows-Betriebssystemdateien befinden.
PowerShell kann auf Umgebungsvariablen in jeder der unterstützten Betriebssystemplattformen zugreifen und diese verwalten. Der PowerShell-Umgebungsanbieter vereinfacht diesen Prozess, indem er das Anzeigen und Ändern von Umgebungsvariablen erleichtert.
Umgebungsvariablen werden im Gegensatz zu anderen Variablentypen in PowerShell von untergeordneten Prozessen geerbt, z. B. von lokalen Hintergrundaufträgen und den Sitzungen, in denen Modulmitglieder ausgeführt werden. Dadurch eignen sich Umgebungsvariablen gut zum Speichern von Werten, die sowohl in übergeordneten als auch in untergeordneten Prozessen benötigt werden.
Verwenden und Ändern von Umgebungsvariablen
Unter Windows können Umgebungsvariablen in drei Bereichen definiert werden:
Der Bereich „Prozess“ enthält die Umgebungsvariablen, die im aktuellen Prozess oder der PowerShell-Sitzung verfügbar sind. Diese Liste von Variablen wird vom übergeordneten Prozess geerbt und wird aus den Variablen in den Bereichen „Maschine“ und „Benutzer“ erstellt. Unix-basierte Plattformen haben nur den Bereich Process.
Sie können die Werte von Umgebungsvariablen anzeigen und ändern, ohne ein Acmdlet zu verwenden, indem Sie eine Variablensyntax mit dem Umgebungsanbieter verwenden. Um den Wert einer Umgebungsvariablen anzuzeigen, verwenden Sie die folgende Syntax:
$Env:<variable-name>
Um beispielsweise den Wert der WINDIR
-Umgebungsvariablen anzuzeigen, geben Sie den folgenden Befehl an der PowerShell-Eingabeaufforderung ein:
$Env:windir
In dieser Syntax zeigt das Dollarzeichen ($
) eine Variable an, und der Laufwerksname(Env:
) zeigt eine Umgebungsvariable an, gefolgt vom Variablennamen(windir
).
Wenn Sie Umgebungsvariablen in PowerShell ändern, wirkt sich die Änderung nur auf die aktuelle Sitzung aus. Dieses Verhalten ähnelt dem Verhalten des Set
-Befehls in der Windows Command Shell und des Setenv
-Befehls in UNIX-basierten Umgebungen. Um Werte im Bereich „Maschine“ oder „Benutzer“ zu ändern, müssen Sie die Methoden der Klasse „System.Environment“ verwenden.
Um Änderungen an Variablen im Bereich „Maschine“ vorzunehmen, müssen Sie ebenfalls eine Berechtigung haben. Wenn Sie versuchen, einen Wert ohne ausreichende Berechtigung zu ändern, schlägt der Befehl fehl und die PowerShell zeigt einen Fehler an.
Sie können die Werte von Variablen ohne Verwendung eines Cmdlets mit der folgenden Syntax ändern:
$Env:<variable-name> = "<new-value>"
Beispielsweise können Sie den Wert der Path
-Umgebungsvariablen mit der folgenden Syntax anhängen:
$Env:Path += ";c:\temp"
Unter Linux oder macOS trennt der Doppelpunkt (:
) im Befehl den neuen Pfad von dem Pfad, der ihm in der Liste vorausgeht.
$Env:PATH += ":/usr/local/temp"
Sie können auch die Item-Cmdlets wie Set-Item
Remove-Item
undCopy-Item
verwenden, um die Werte von Umgebungsvariablen zu ändern. Um beispielsweise das Cmdlet Set-Item
zu verwenden, um ;c:\temp
an den Wert der Path
Umgebungsvariablen anzuhängen, verwenden Sie die folgende Syntax:
Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")
In diesem Befehl wird der Wert in Klammern eingeschlossen, damit er als Einheit interpretiert wird.
Umgebungsvariablen, die Präferenzen speichern
PowerShell-Funktionen können Umgebungsvariablen verwenden, um Benutzerpräferenzen zu speichern. Diese Variablen funktionieren wie Präferenzvariablen, werden jedoch an untergeordnete Sitzungen der Sitzungen vererbt, in denen sie erstellt wurden. Weitere Informationen zu Einstellungsvariablen finden Sie unter about_preference_variables.
Zu den Umgebungsvariablen, die Einstellungen speichern, gehören:
-
PSExecutionPolicyPreference
Speichert die für die aktuelle Sitzung festgelegte Ausführungsrichtlinie. Diese Umgebungsvariable ist nur vorhanden, wenn Sie eine Ausführungsrichtlinie für eine einzelne Sitzung festlegen.
-
Starten Sie eine Sitzung über die Befehlszeile mit dem Parameter ExecutionPolicyparameter, um die Ausführungsrichtlinie für die Sitzung festzulegen.
-
Verwenden Sie das Cmdlet
Set-ExecutionPolicy
. Verwenden Sie den Scope-Parameter mit dem Wert „Process“.Weitere Informationen finden Sie unter about_Execution_Policies.
-
-
PSModuleAnalysisCachePath
PowerShell bietet eine Steuerung für die Datei, die zum Zwischenspeichern von Daten über Module und ihre Cmdlets verwendet wird. Der Cache wird beim Start während der Suche nach einem Befehl gelesen und irgendwann nach dem Importieren eines Moduls in einem Hintergrundthread geschrieben.
Der Standardspeicherort des Cache ist:
- Windows PowerShell 5.1:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
- PowerShell 6.0 und höher:
$env:LOCALAPPDATA\Microsoft\PowerShell
- Nicht-Windows-Standard:
~/.cache/powershell
Der Standard-Dateiname für den Cache ist
ModuleAnalysisCache
. Wenn Sie mehrere Instanzen von PowerShell installiert haben, enthält der Dateiname einhexadezimales Suffix, damit es einen eindeutigen Dateinamen pro Installation gibt.Hinweis
Wenn die Befehlserkennung nicht richtig funktioniert, z. B. Intellisens zeigt Befehle an, die nicht existieren, können Sie die Cache-Datei löschen. Der Cache wird beim nächsten Start der PowerShell neu erstellt.
Um den Standardspeicherort des Caches zu ändern, setzen Sie die Umgebungsvariablevor dem Start der PowerShell. Änderungen an dieser Umgebungsvariablen wirken sich nur auf Child-Prozesse aus. Der Wert sollte einen vollständigen Pfad (einschließlich Dateiname) nennen, für den PowerShell die Berechtigung zum Erstellen und Schreiben von Dateien hat.
Um den Dateicache zu deaktivieren, setzen Sie diesen Wert auf einen ungültigen Speicherort, z. B.:
# `NUL` here is a special device on Windows that cannot be written to,# on non-Windows you would use `/dev/null`$env:PSModuleAnalysisCachePath = 'NUL'
Damit wird der Pfad auf das NUL-Gerät gesetzt. PowerShell kann nicht in den Pfad schreiben, aber es wird kein Fehler zurückgegeben. Sie können die gemeldeten Fehler mit atracer sehen:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
- Windows PowerShell 5.1:
-
PSDisableModuleAnalysisCacheCleanup
Beim Ausschreiben des Modulanalyse-Caches prüft PowerShell auf nicht mehr vorhandene Module, um einen unnötig großen Cache zu vermeiden. Manchmal sind diese Überprüfungen nicht erwünscht. In diesem Fall können Sie sie deaktivieren, indem Sie den Wert dieser Umgebungsvariablen auf
1
setzen.Das Setzen dieser Umgebungsvariablen wird sofort im aktuellen Prozess wirksam.
-
PSModulePath
Die
$env:PSModulePath
Umgebungsvariable enthält eine Liste von Ordnerspeicherorten, die durchsucht werden, um Module und Ressourcen zu finden.Standardmäßig sind die effektiven Speicherorte, die
$env:PSModulePath
zugewiesen sind:-
Systemweite Speicherorte: Diese Ordner enthalten Module, die mitPowerShell ausgeliefert werden. Die Module werden im Speicherort
$PSHOME\Modules
gespeichert. Außerdem werden an diesem Speicherort die Windows-Verwaltungsmodule installiert. -
Benutzer-installierte Module: Dies sind Module, die vom Benutzer installiert werden.
Install-Module
hat einen Scope-Parameter, mit dem Sie festlegen können, ob das Modul für den aktuellen Benutzer oder für alle Benutzer installiert wird. Weitere Informationen finden Sie unter Install-Module.- Unter Windows ist der Speicherort des benutzerspezifischen Bereichs CurrentUser der Ordner
$HOME\Documents\PowerShell\Modules
. Der Speicherort des Bereichs „AllUsers“ ist$env:ProgramFiles\PowerShell\Modules
. - Auf Nicht-Windows-Systemen ist der Speicherort des benutzerspezifischen Bereichs „CurrentUsers“ der Ordner
$HOME/.local/share/powershell/Modules
. Der Speicherort des Bereichs „AllUsers“ ist/usr/local/share/powershell/Modules
.
- Unter Windows ist der Speicherort des benutzerspezifischen Bereichs CurrentUser der Ordner
Zusätzlich können Setup-Programme, die Module in anderen Verzeichnissen installieren, z. B. im Verzeichnis „Programme“, deren Speicherorte an den Wert von
$env:PSModulePath
anhängen.Weitere Informationen finden Sie unter about_PSModulePath.
-
Verwalten von Umgebungsvariablen
PowerShell bietet mehrere verschiedene Methoden zum Verwalten von Umgebungsvariablen.
- Das Umgebungsanbieterlaufwerk
- Die Item-Cmdlets
- Die .NET System.Environment-Klasse
- Unter Windows die Systemsteuerung
Verwenden des Environment-Anbieters
Jede Umgebungsvariable wird durch eine Instanz derSystem.Collections.DictionaryEntry-Klasse dargestellt. In jedem DictionaryEntry-Objekt ist der Name der Umgebungsvariablen der Schlüssel des Dictionarys. Der Wert der Variablen ist der Dictionary-Wert.
Um die Eigenschaften und Methoden des Objekts, das eine Umgebungsvariable darstellt, in PowerShell anzuzeigen, verwenden Sie das Cmdlet Get-Member
. Um beispielsweise die Methoden und Eigenschaften aller Objekte im Laufwerk Env:
anzuzeigen, geben Sie ein:
Get-Item -Path Env:* | Get-Member
Mit dem PowerShell-Umgebungsanbieter können Sie auf Umgebungsvariablen in einem PowerShell-Laufwerk (dem Laufwerk Env:
) zugreifen. Dieses Laufwerk sieht ähnlich aus wie ein Dateisystemlaufwerk. Um zum Env:
-Laufwerk zu wechseln, geben Sie ein:
Set-Location Env:
Verwenden Sie die Inhalts-Cmdlets, um die Werte einer Umgebungsvariablen abzurufen oder festzulegen.
PS Env:\> Set-Content -Path Test -Value 'Test value'PS Env:\> Get-Content -Path TestTest value
Sie können die Umgebungsvariablen im Laufwerk Env:
von jedem anderenPowerShell-Laufwerk aus anzeigen, und Sie können in das Laufwerk Env:
wechseln, um die Umgebungsvariablen anzuzeigen und zu ändern.
Verwenden von Element-Cmdlets
Wenn Sie sich auf eine Umgebungsvariable beziehen, geben Sie den Env:
-Laufwerksnamen gefolgt vom Namen der Variablen ein. Um zum Beispiel den Wert derCOMPUTERNAME
Umgebungsvariablen anzuzeigen, geben Sie ein:
Get-ChildItem Env:Computername
Um die Werte aller Umgebungsvariablen anzuzeigen, geben Sie ein:
Get-ChildItem Env:
Da Umgebungsvariablen keine untergeordneten Elemente haben, ist die Ausgabe von Get-Item
und Get-ChildItem
die gleiche.
Standardmäßig zeigt PowerShell die Umgebungsvariablen in der Reihenfolge an, in der es sie abruft. Um die Liste der Umgebungsvariablen nach Variablennamen zu sortieren, übergeben Sie die Ausgabe eines Get-ChildItem
-Befehls über die Pipeline an das Cmdlet Sort-Object
. Geben Sie beispielsweise von einem beliebigen PowerShell-Laufwerk aus Folgendes ein:
Get-ChildItem Env: | Sort Name
Sie können auch mit dem Cmdlet Set-Location
in das Env:
-Laufwerk wechseln:
Set-Location Env:
Wenn Sie sich im Env:
Laufwerk befinden, können Sie den Env:
Laufwerksnamen aus dem Pfad weglassen. Um zum Beispiel alle Umgebungsvariablen anzuzeigen, geben Sie ein:
PS Env:\> Get-ChildItem
Um den Wert der COMPUTERNAME
-Variable aus dem Env:
-Laufwerk anzuzeigen, geben Sie ein:
PS Env:\> Get-ChildItem ComputerName
Änderungen an Umgebungsvariablen speichern
Um eine dauerhafte Änderung an einer Umgebungsvariablen unter Windows vorzunehmen, verwenden Sie dieSystemsteuerung. Wählen Sie Erweiterte Systemeinstellungen. Klicken Sie auf der Registerkarte Erweitert auf Umgebungsvariable….. Sie können vorhandene Umgebungsvariablen in den Bereichen Benutzer und System (Maschine) hinzufügen oder bearbeiten. Windows schreibt diese Werte in die Registrierung, sodass sie über Sitzungen und Systemneustarts hinweg bestehen bleiben.
Alternativ können Sie Umgebungsvariablen in Ihrem PowerShell-Profil hinzufügen oder ändern. Diese Methode funktioniert für jede Version von PowerShell auf jeder unterstützten Plattform.
Verwenden von System.Environment-Methoden
Die Klasse System.Environment bietet GetEnvironmentVariable- undSetEnvironmentVariable-Methoden, mit denen Sie den Bereich der Variablen angeben können.
Das folgende Beispiel verwendet die GetEnvironmentVariable-Methode, um die Maschineneinstellung von PSModulePath
abzurufen, und die SetEnvironmentVariable-Methode, um den C:\Program Files\Fabrikam\Modules
-Pfad zum Wert hinzuzufügen.
$path = ::GetEnvironmentVariable('PSModulePath', 'Machine')$newpath = $path + ';C:\Program Files\Fabrikam\Modules'::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')
Weitere Informationen zu den Methoden der Klasse System.Environment finden Sie unterEnvironment-Methoden.
Siehe auch
- Environment (Anbieter)
- über_Module