Informationen zu Umgebungsvariablen
KURZE BESCHREIBUNG
Beschreibt den Zugriff auf Windows-Umgebungsvariablen in PowerShell.
LANGE BESCHREIBUNG
Umgebungsvariablen speichern Informationen zur Betriebssystemumgebung. Diese Informationen umfassen Details wie den Betriebssystempfad, die Anzahl der vom Betriebssystem verwendeten Prozessoren und den Speicherort temporärer Ordner.
Die Umgebungsvariablen speichern Daten, die vom Betriebssystem und anderen Programmen verwendet werden. Die Umgebungsvariable WINDIR
enthält beispielsweise den Speicherort des Windows-Installationsverzeichnisses. Programme können den Wert dieser Variablen abfragen, um zu bestimmen, wo sich Windows-Betriebssystemdateien befinden.
PowerShell kann auf alle unterstützten Betriebssystemplattformen auf Umgebungsvariablen zugreifen und diese verwalten. Der PowerShell-Umgebungsanbieter vereinfacht diesen Prozess, indem er das Anzeigen und Ändern von Umgebungsvariablen vereinfacht.
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:
- Computerbereich (oder Systembereich)
- Benutzerbereich
- Prozessbereich
Der Prozessbereich enthält die Umgebungsvariablen, die in der aktuellen Prozess- oder PowerShell-Sitzung verfügbar sind. Diese Variablenliste wird vom übergeordneten Prozess geerbt und aus den Variablen im Bereich Computer und Benutzer erstellt. Unix-basierte Plattformen verfügen nur über den Prozessbereich .
Sie können die Werte von Umgebungsvariablen anzeigen und ändern, ohne ein Cmdlet zu verwenden, indem Sie eine Variablensyntax mit dem Umgebungsanbieter verwenden. Verwenden Sie die folgende Syntax, um den Wert einer Umgebungsvariablen anzuzeigen:
$Env:<variable-name>
Geben Sie beispielsweise den folgenden Befehl an der PowerShell-Eingabeaufforderung ein, um den Wert WINDIR
der Umgebungsvariablen anzuzeigen:
$Env:windir
In dieser Syntax gibt das Dollarzeichen ($
) eine Variable und der Laufwerkname (Env:
) eine Umgebungsvariable gefolgt vom Variablennamen (windir
) an.
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-Befehlsshell und des Setenv
Befehls in UNIX-basierten Umgebungen. Um Werte im Bereich Computer oder Benutzer zu ändern, müssen Sie die Methoden der System.Environment-Klasse verwenden.
Wenn Sie Änderungen an Variablen im Bereich des Computers vornehmen möchten, müssen Sie auch über die Berechtigung verfügen. Wenn Sie versuchen, einen Wert ohne ausreichende Berechtigung zu ändern, schlägt der Befehl fehl, und PowerShell zeigt einen Fehler an.
Sie können die Werte von Variablen ändern, ohne ein Cmdlet mit der folgenden Syntax zu verwenden:
$Env:<variable-name> = "<new-value>"
Verwenden Sie beispielsweise die folgende Syntax, um an den Wert der Path
Umgebungsvariablen anzufügen;c:\temp
:
$Env:Path += ";c:\temp"
Unter Linux oder MacOS trennt der Doppelpunkt (:
) im Befehl den neuen Pfad von dem Pfad, der ihm in der Liste vorangestellt ist.
$Env:PATH += ":/usr/local/temp"
Sie können auch die Item-Cmdlets wie Set-Item
, Remove-Item
und Copy-Item
verwenden, um die Werte von Umgebungsvariablen zu ändern. Um beispielsweise das Set-Item
Cmdlet zum Anfügen ;c:\temp
an den Wert der Path
Umgebungsvariablen zu verwenden, verwenden Sie die folgende Syntax:
Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")
In diesem Befehl wird der Wert in Klammern eingeschlossen, sodass er als Einheit interpretiert wird.
Umgebungsvariablen, die Einstellungen speichern
PowerShell-Features können Umgebungsvariablen verwenden, um Benutzereinstellungen zu speichern. Diese Variablen funktionieren wie Einstellungsvariablen, werden aber von untergeordneten Sitzungen der Sitzungen geerbt, in denen sie erstellt werden. Weitere Informationen zu Einstellungsvariablen finden Sie unter about_preference_variables.
Zu den Umgebungsvariablen, die Einstellungen speichern, gehören:
PSExecutionPolicyPreference
Speichert den Ausführungsrichtliniensatz für die aktuelle Sitzung. Diese Umgebungsvariable ist nur vorhanden, wenn Sie eine Ausführungsrichtlinie für eine einzelne Sitzung festlegen. Dies kann auf zwei verschiedene Arten erfolgen.
Starten Sie eine Sitzung über die Befehlszeile mithilfe des Parameters ExecutionPolicy , um die Ausführungsrichtlinie für die Sitzung festzulegen.
Verwenden Sie das
Set-ExecutionPolicy
-Cmdlet. Verwenden Sie den Scope-Parameter mit dem Wert "Process".Weitere Informationen finden Sie unter about_Execution_Policies.
PSModuleAnalysisCachePath
PowerShell ermöglicht die Kontrolle über die Datei, die zum Zwischenspeichern von Daten zu Modulen und deren Cmdlets verwendet wird. Der Cache wird beim Start während der Suche nach einem Befehl gelesen und irgendwann nach dem Importieren eines Moduls in einen Hintergrundthread geschrieben.
Der Standardspeicherort des Caches lautet:
- 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 Standarddateiname für den Cache ist
ModuleAnalysisCache
. Wenn Sie mehrere Instanzen von PowerShell installiert haben, enthält der Dateiname ein hexadezimales Suffix, sodass pro Installation ein eindeutiger Dateiname vorhanden ist.Hinweis
Wenn die Befehlsermittlung nicht ordnungsgemäß funktioniert, z. B. Intellisense Befehle anzeigt, die nicht vorhanden sind, können Sie die Cachedatei löschen. Der Cache wird beim nächsten Starten von PowerShell neu erstellt.
Um den Standardspeicherort des Caches zu ändern, legen Sie die Umgebungsvariable vor dem Starten von PowerShell fest. Änderungen an dieser Umgebungsvariablen wirken sich nur auf untergeordnete Prozesse aus. Der Wert muss einen vollständigen Pfad (samt Dateiname) definieren, in dem PowerShell die Berechtigung zum Erstellen und Schreiben von Dateien hat.
Zum Deaktivieren des Dateicaches kann dieser Wert auf einen ungültigen Speicherort festgelegt werden. Beispiel:
# `NUL` here is a special device on Windows that cannot be written to, # on non-Windows you would use `/dev/null` $env:PSModuleAnalysisCachePath = 'NUL'
Dadurch wird der Pfad zum NUL-Gerät festgelegt. PowerShell kann nicht in den Pfad schreiben, aber es wird kein Fehler zurückgegeben. Sie können die mit einem Ablaufverfolgungsmodus gemeldeten Fehler anzeigen:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
- Windows PowerShell 5.1:
PSDisableModuleAnalysisCacheCleanup
Beim Schreiben des Modulanalysecaches überprüft PowerShell nach Modulen, die nicht mehr vorhanden sind, 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 diesen Umgebungsvariablenwert auf
1
festlegen.Das Festlegen dieser Umgebungsvariablen wird im aktuellen Prozess sofort wirksam.
PSModulePath
Die Umgebungsvariable
$env:PSModulePath
enthält eine Liste von Ordnerspeicherorten, die nach Modulen und Ressourcen gesucht werden.Standardmäßig sind die folgenden effektiven Speicherorte zugewiesen
$env:PSModulePath
:Systemweite Speicherorte: Diese Ordner enthalten Module, die mit PowerShell ausgeliefert werden. Die Module werden am
$PSHOME\Modules
Speicherort gespeichert. Außerdem ist dies der Speicherort, an dem die Windows-Verwaltungsmodule installiert werden.Vom Benutzer installierte Module: Hierbei handelt es sich um vom Benutzer installierte Module.
Install-Module
verfügt über einen Scope-Parameter , mit dem Sie angeben können, ob das Modul für den aktuellen Benutzer oder für alle Benutzer installiert ist. Weitere Informationen finden Sie unter Install-Module.- Unter Windows ist der Speicherort des benutzerspezifischen CurrentUser-Bereichs der
$HOME\Documents\PowerShell\Modules
Ordner. Der Speicherort des AllUsers-Bereichs ist$env:ProgramFiles\PowerShell\Modules
. - Auf Nicht-Windows-Systemen ist der Speicherort des benutzerspezifischen CurrentUser-Bereichs der
$HOME/.local/share/powershell/Modules
Ordner. Der Speicherort des AllUsers-Bereichs ist/usr/local/share/powershell/Modules
.
- Unter Windows ist der Speicherort des benutzerspezifischen CurrentUser-Bereichs der
Darüber hinaus können Setupprogramme, die Module in anderen Verzeichnissen installieren, z. B. das Verzeichnis Programme, ihre Speicherorte an den Wert von
$env:PSModulePath
anfügen.Weitere Informationen finden Sie unter about_PSModulePath.
Verwalten von Umgebungsvariablen
PowerShell bietet verschiedene Methoden zum Verwalten von Umgebungsvariablen.
- Laufwerk des Umgebungsanbieters
- Die Item-Cmdlets
- Die .NET System.Environment-Klasse
- Unter Windows Systemsteuerung
Verwenden des Umgebungsanbieters
Jede Umgebungsvariable wird durch eine instance der System.Collections.DictionaryEntry-Klasse dargestellt. In jedem DictionaryEntry-Objekt ist der Name der Umgebungsvariable der Wörterbuchschlüssel. Der Wert der Variablen ist der Wörterbuchwert.
Verwenden Sie das Cmdlet, um die Eigenschaften und Methoden des Objekts anzuzeigen, das Get-Member
eine Umgebungsvariable in PowerShell darstellt. Um beispielsweise die Methoden und Eigenschaften aller Objekte im Env:
Laufwerk anzuzeigen, geben Sie Folgendes ein:
Get-Item -Path Env:* | Get-Member
Mit dem PowerShell-Umgebungsanbieter können Sie auf Umgebungsvariablen in einem PowerShell-Laufwerk (laufwerk Env:
) zugreifen. Dieses Laufwerk ähnelt einem Dateisystemlaufwerk. Um zum Laufwerk zu Env:
wechseln, geben Sie Folgendes 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 Test
Test value
Sie können die Umgebungsvariablen auf dem Env:
Laufwerk von jedem anderen PowerShell-Laufwerk aus anzeigen und auf das Env:
Laufwerk wechseln, um die Umgebungsvariablen anzuzeigen und zu ändern.
Verwenden von Item-Cmdlets
Wenn Sie auf eine Umgebungsvariable verweisen, geben Sie den Env:
Laufwerksnamen gefolgt vom Namen der Variablen ein. Geben Sie beispielsweise Folgendes ein, um den Wert der COMPUTERNAME
Umgebungsvariablen anzuzeigen:
Get-ChildItem Env:Computername
Geben Sie Folgendes ein, um die Werte aller Umgebungsvariablen anzuzeigen:
Get-ChildItem Env:
Da Umgebungsvariablen keine untergeordneten Elemente aufweisen, ist die Ausgabe von Get-Item
und Get-ChildItem
identisch.
Standardmäßig zeigt PowerShell die Umgebungsvariablen in der Reihenfolge an, in der sie abgerufen werden. Um die Liste der Umgebungsvariablen nach Variablennamen zu sortieren, übergeben Sie die Ausgabe eines Get-ChildItem
Befehls an das Sort-Object
Cmdlet. Geben Sie beispielsweise von einem beliebigen PowerShell-Laufwerk Folgendes ein:
Get-ChildItem Env: | Sort Name
Sie können auch mit dem Cmdlet auf das Env:
Set-Location
Laufwerk wechseln:
Set-Location Env:
Wenn Sie sich auf dem Env:
Laufwerk befinden, können Sie den Env:
Laufwerksnamen im Pfad weglassen. Um beispielsweise alle Umgebungsvariablen anzuzeigen, geben Sie Folgendes ein:
PS Env:\> Get-ChildItem
Geben Sie Folgendes ein, um den Wert der COMPUTERNAME
Variablen innerhalb des Laufwerks Env:
anzuzeigen:
PS Env:\> Get-ChildItem ComputerName
Speichern von Änderungen an Umgebungsvariablen
Verwenden Sie die System-Systemsteuerung, um eine dauerhafte Änderung an einer Umgebungsvariable unter Windows vorzunehmen. Wählen Sie Erweiterte Systemeinstellungen aus. Klicken Sie auf der Registerkarte Erweitert auf Umgebungsvariable.... Sie können vorhandene Umgebungsvariablen in den Bereichen Benutzer und System (Computer) hinzufügen oder bearbeiten. Windows schreibt diese Werte in die Registrierung, damit sie über Sitzungen und Systemneustarts hinweg beibehalten werden.
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 System.Environment-Klasse stellt die Methoden GetEnvironmentVariable und SetEnvironmentVariable bereit, mit denen Sie den Bereich der Variablen angeben können.
Im folgenden Beispiel wird die GetEnvironmentVariable-Methode verwendet, um die Computereinstellung von PSModulePath
abzurufen, und die SetEnvironmentVariable-Methode , um den C:\Program Files\Fabrikam\Modules
Pfad zum Wert hinzuzufügen.
$path = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine')
$newpath = $path + ';C:\Program Files\Fabrikam\Modules'
[Environment]::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')
Weitere Informationen zu den Methoden der System.Environment-Klasse finden Sie unter Umgebungsmethoden.