about_Environment_Variables
Kurze Beschreibung
Beschreibt, wie Sie auf Umgebungsvariablen in PowerShell zugreifen und diese verwalten.
Umgebungsvariablen speichern Daten, die vom Betriebssystem und anderen Programmen verwendet werden. PowerShell erstellt die folgenden Umgebungsvariablen:
- POWERSHELL_TELEMETRY_OPTOUT
- POWERSHELL_DISTRIBUTION_CHANNEL
- POWERSHELL_UPDATECHECK
- PSExecutionPolicyPreference
- PSModulePath
- PSModuleAnalysisCachePath
- PSDisableModuleAnalysisCacheCleanup
Eine vollständige Beschreibung dieser Variablen finden Sie in den PowerShell-Umgebungsvariablen dieses Artikels.
Lange Beschreibung
PowerShell kann auf alle unterstützten Betriebssystemplattformen auf Umgebungsvariablen zugreifen und diese verwalten. Mit dem PowerShell-Umgebungsanbieter können Sie Umgebungsvariablen in der aktuellen Konsole abrufen, hinzufügen, ändern, löschen und löschen.
Hinweis
Im Gegensatz zu Windows wird bei Den Namen von Umgebungsvariablen unter macOS und Linux die Groß-/Kleinschreibung beachtet. Beispielsweise $env:Path
sind und $env:PATH
unterschiedliche Umgebungsvariablen auf Nicht-Windows-Plattformen.
Umgebungsvariablen werden im Gegensatz zu anderen Variablentypen in PowerShell immer als Zeichenfolgen gespeichert. Im Gegensatz zu anderen Variablen werden sie auch 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.
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.
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.
Um Änderungen an Variablen im Bereich des Computers vorzunehmen, 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.
PowerShell bietet verschiedene Methoden für die Verwendung und Verwaltung von Umgebungsvariablen.
- Die Variablensyntax
- Die Cmdlets "Umgebungsanbieter" und "Element"
- Die .NET System.Environment-Klasse
Verwenden der Variablensyntax
Sie können die Werte von Umgebungsvariablen mit der folgenden Syntax anzeigen und ändern:
$Env:<variable-name>
So zeigen Sie beispielsweise den Wert der Umgebungsvariablen WINDIR
an:
$Env:windir
C:\Windows
In dieser Syntax gibt das Dollarzeichen ($
) eine Variable und der Laufwerkname (Env:
) eine Umgebungsvariable gefolgt vom Variablennamen (windir
) an.
Sie können den Wert von Umgebungsvariablen mit der folgenden Syntax erstellen und aktualisieren:
$Env:<variable-name> = "<new-value>"
So erstellen Sie beispielsweise die Umgebungsvariable Foo
:
$Env:Foo = 'An example'
Da Umgebungsvariablen immer Zeichenfolgen sind, können Sie sie wie jede andere Variable verwenden, die eine Zeichenfolge enthält. Beispiel:
"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example
An example!
In PowerShell kann eine Umgebungsvariable nicht auf eine leere Zeichenfolge festgelegt werden. Wenn Sie eine Umgebungsvariable auf $null
oder eine leere Zeichenfolge festlegen, wird sie aus der aktuellen Sitzung entfernt. Beispiel:
$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+ ~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Get-Member
hat einen Fehler zurückgegeben, da die Umgebungsvariable entfernt wurde.
Sie können sehen, dass es keinen Fehler zurückgibt, wenn Sie ihn für eine leere Zeichenfolge verwenden:
'' | Get-Member -MemberType Properties
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
Weitere Informationen zu Variablen in PowerShell finden Sie unter about_Variables.
Verwenden der Cmdlets "Umgebungsanbieter" und "Element"
Der Umgebungsanbieter von PowerShell bietet Ihnen eine Schnittstelle für die Interaktion mit Umgebungsvariablen in einem Format, das einem Dateisystemlaufwerk ähnelt. Sie können Umgebungsvariablen und -werte in PowerShell abrufen, hinzufügen, ändern, löschen und löschen.
So erstellen Sie beispielsweise die Umgebungsvariable Foo
mit dem Wert :Bar
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
Sie können die Umgebungsvariable auch mit Copy-Item
kopieren, den Wert einer Umgebungsvariable mit Set-Item
festlegen, Umgebungsvariablen mit Get-Item
auflisten und die Umgebungsvariable mit Remove-Item
löschen.
Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name Value
---- -----
Foo2 Bar
Name Value
---- -----
Foo2 BAR
Foo Bar
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".
Verwenden Sie das Get-ChildItem
Cmdlet, um eine vollständige Liste der Umgebungsvariablen anzuzeigen:
Get-ChildItem Env:
Weitere Informationen zur Verwendung des Umgebungsanbieters zum Verwalten von Umgebungsvariablen finden Sie unter about_Environment_Provider.
Verwenden der System.Environment-Methoden
Die System.Environment-Klasse stellt die GetEnvironmentVariable()
Methoden und SetEnvironmentVariable()
bereit, um Umgebungsvariablen abzurufen und zu ändern.
Im folgenden Beispiel wird eine neue Umgebungsvariable mit Foo
dem Wert von Bar
erstellt und dann deren Wert zurückgegeben.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
Sie können eine Umgebungsvariable mit der SetEnvironmentVariable()
-Methode entfernen, indem Sie eine leere Zeichenfolge für den Wert der Variablen angeben. So entfernen Sie beispielsweise die Umgebungsvariable Foo
:
[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')
Weitere Informationen zu den Methoden der System.Environment-Klasse finden Sie unter Umgebungsmethoden.
Create persistente Umgebungsvariablen in Windows
Unter Windows gibt es drei Methoden, um eine dauerhafte Änderung an einer Umgebungsvariable vorzunehmen:
- Festlegen in Ihrem Profil
- Verwenden der
SetEnvironmentVariable()
-Methode - Verwenden des System-Systemsteuerung
Festlegen von Umgebungsvariablen in Ihrem Profil
Alle Umgebungsvariablen, die Sie in Ihrem PowerShell-Profil hinzufügen oder ändern, sind in jeder Sitzung verfügbar, die Ihr Profil lädt. Diese Methode funktioniert für jede Version von PowerShell auf jeder unterstützten Plattform.
Um beispielsweise die Umgebungsvariable CompanyUri
zu erstellen und die Path
Umgebungsvariable so zu aktualisieren, dass sie den C:\Tools
Ordner enthält, fügen Sie Ihrem PowerShell-Profil die folgenden Zeilen hinzu:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'
Hinweis
Unter Linux oder macOS wird der Doppelpunkt (:
) anstelle eines semi-colon(;
) verwendet, um einen neuen Pfad von dem Pfad zu trennen, der ihm in der Liste vorangestellt ist.
Sie können den Pfad zu Ihrem PowerShell-Profil mit der automatischen $PROFILE
Variablen abrufen. Weitere Informationen zu Profilen finden Sie unter about_Profiles.
Festlegen von Umgebungsvariablen mit SetEnvironmentVariable()
Unter Windows können Sie einen Bereich für die SetEnvironmentVariable()
-Methode als dritten Parameter angeben, um die Umgebungsvariable in diesem Bereich festzulegen. Die Computer- und Benutzerbereiche bleiben außerhalb des aktuellen Prozesses erhalten, sodass Sie eine neue oder geänderte Umgebungsvariable speichern können.
Um beispielsweise eine neue Umgebungsvariable Foo
mit dem Wert Bar
im Computerbereich zu speichern:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Sie können eine Umgebungsvariable aus dem Benutzer- oder Computerbereich löschen, indem Sie den Wert der Variablen auf eine leere Zeichenfolge festlegen.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Festlegen von Umgebungsvariablen im System Systemsteuerung
Im System Systemsteuerung können Sie vorhandene Umgebungsvariablen im Bereich Benutzer und System (Computer) hinzufügen oder bearbeiten. Windows schreibt diese Werte in die Registrierung, sodass sie über Sitzungen und Systemneustarts hinweg beibehalten werden.
So nehmen Sie eine dauerhafte Änderung an einer Umgebungsvariablen unter Windows mithilfe des System-Systemsteuerung vor:
- Öffnen Sie die system Systemsteuerung.
- Klicken Sie auf System.
- Wählen Sie Erweiterte Systemeinstellungen aus.
- Wechseln Sie zur Registerkarte Erweitert .
- Wählen Sie Umgebungsvariablen... aus.
- Nehmen Sie Ihre Änderungen vor.
Create persistente Umgebungsvariablen auf Nicht-Windows-Plattformen
Linux und macOS verfügen über Konfigurationsdateien und Skripts, die das Betriebssystem verwendet, um Umgebungsvariablen vor dem Starten einer Anwendung festzulegen.
Wenn Sie PowerShell als Standardshell (Anmeldeshell) ausführen, können Sie Umgebungsvariablen in den globalen Initialisierungsdateien definieren, die vom Betriebssystem unterstützt werden. Unter Linux können Sie der Datei beispielsweise Umgebungsvariablen /etc/environment
hinzufügen oder ein Skript erstellen, das Umgebungsvariablen festlegt und in den /etc/profile.d
Ordner legt. Unter macOS können Sie der Datei Umgebungsvariablen /etc/profile
hinzufügen.
Wenn Sie PowerShell über eine andere Shell starten, können Sie Umgebungsvariablen in den Shell-spezifischen Initialisierungsdateien definieren, die von Shells ohne Anmeldung verwendet werden, z ~/.bashrc
. B. für bash
oder ~/.zshrc
für zsh
.
Weitere Informationen finden Sie in der Dokumentation für Ihr Betriebssystem und die Standardshell.
PowerShell-Umgebungsvariablen
PowerShell-Features können Umgebungsvariablen verwenden, um Benutzereinstellungen zu speichern. Diese Variablen funktionieren wie Präferenzvariablen, aber sie werden 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:
POWERSHELL_TELEMETRY_OPTOUT
Legen Sie zum Deaktivieren von Telemetriedaten die Umgebungsvariable auf ,
yes
oder1
festtrue
. Weitere Informationen finden Sie unter about_Telemetry.Damit diese Umgebungsvariable wirksam wird, muss sie vor dem Starten des PowerShell-Prozesses festgelegt werden. Informationen zum Erstellen persistenter Umgebungsvariablen finden Sie in den vorherigen Abschnitten.
POWERSHELL_DISTRIBUTION_CHANNEL
Ab PowerShell 7.2 wird diese Umgebungsvariable von den Installationspaketen festgelegt, um die Methode und die Quelle der Installation für PowerShell aufzuzeichnen.
Diese Informationen sind in den Telemetriedaten enthalten, die an Microsoft gesendet werden. Benutzer sollten diesen Wert nicht ändern.
POWERSHELL_UPDATECHECK
Das Verhalten der Updatebenachrichtigung kann mithilfe der Umgebungsvariablen
POWERSHELL_UPDATECHECK
geändert werden. Weitere Informationen finden Sie unter about_Update_Notifications.Die folgenden Werte werden unterstützt:
Off
deaktiviert das Updatebenachrichtigungsfeature.Default
ist identisch mit der NichtdefinitionPOWERSHELL_UPDATECHECK
von :- GA-Releases benachrichtigen zu Updates von GA-Releases.
- Vorschau-/RC-Releases benachrichtigen zu Updates von GA- und Vorschau-Releases.
LTS
benachrichtigt nur über Updates für LTS-Releases (Long Term Servicing)
Nicht standardmäßige Werte der Umgebungsvariablen müssen festgelegt werden, bevor der PowerShell-Prozess gestartet wird. Informationen zum Erstellen persistenter Umgebungsvariablen finden Sie in den vorherigen Abschnitten.
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. Sie können dies auf zwei verschiedene Arten tun.
Starten Sie eine Sitzung über die Befehlszeile, indem Sie den Parameter ExecutionPolicy verwenden, um die Ausführungsrichtlinie für die Sitzung festzulegen.
Verwenden Sie das
Set-ExecutionPolicy
-Cmdlet. Verwenden Sie den Scope-Parameter mit dem Wert .Process
Legen Sie die Umgebungsvariable manuell fest. Wenn Sie den Wert dieser Variablen ändern, wird die Ausführungsrichtlinie des aktuellen Prozesses geändert.
Diese Informationen gelten nur für die Windows-Plattform. Weitere Informationen finden Sie unter about_Execution_Policies.
PSModulePath
Die Umgebungsvariable
$env:PSModulePath
enthält eine Liste von Ordnerspeicherorten, die nach Modulen und Ressourcen gesucht werden. Unter Windows wird die Liste der Ordnerspeicherorte durch das Semikolonzeichen (;
) getrennt. Auf Nicht-Windows-Plattformen trennt der Doppelpunkt (:
) die Ordnerspeicherorte in der Umgebungsvariablen.Standardmäßig sind folgende effektive Standorte zugewiesen
$env:PSModulePath
:Systemweite Speicherorte: Diese Ordner enthalten Module, die im Lieferumfang von PowerShell enthalten sind. 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: Dies sind 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.
PSModuleAnalysisCachePath
PowerShell bietet kontrolle über die Datei, die zum Zwischenspeichern von Daten zu Modulen und deren Cmdlets verwendet wird. Der Cache wird beim Start gelesen, während nach einem Befehl gesucht wird, und wird 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 fest, bevor Sie PowerShell starten. Der Wert muss einen vollständigen Pfad (samt Dateiname) definieren, in dem PowerShell die Berechtigung zum Erstellen und Schreiben von Dateien hat.
Änderungen an dieser Umgebungsvariablen wirken sich nur auf untergeordnete Prozesse aus. Informationen zum Erstellen persistenter Umgebungsvariablen finden Sie in den vorherigen Abschnitten.
Zum Deaktivieren des Dateicaches kann dieser Wert auf einen ungültigen Speicherort festgelegt werden. Beispiel:
# `NUL` here is a special device on Windows that can't 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 Tracer gemeldeten Fehler anzeigen:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
- Windows PowerShell 5.1:
PSDisableModuleAnalysisCacheCleanup
Beim Schreiben des Modulanalysecaches sucht PowerShell nach Modulen, die nicht mehr vorhanden sind, um einen unnötig großen Cache zu vermeiden. Manchmal sind diese Überprüfungen nicht wünschenswert. In diesem Fall können Sie sie deaktivieren, indem Sie diesen Umgebungsvariablenwert auf
1
festlegen.Das Festlegen dieser Umgebungsvariablen wird für nachfolgende Bereinigungsereignisse im aktuellen Prozess wirksam. Um sicherzustellen, dass die Bereinigung beim Start deaktiviert ist, müssen Sie die Umgebungsvariable festlegen, bevor Sie PowerShell starten. Informationen zum Erstellen persistenter Umgebungsvariablen finden Sie in den vorherigen Abschnitten.
Andere Umgebungsvariablen, die von PowerShell verwendet werden
Pfadinformationen
PATH
Die Umgebungsvariable
$env:PATH
enthält eine Liste von Ordnerspeicherorten, die das Betriebssystem nach ausführbaren Dateien sucht. Unter Windows wird die Liste der Ordnerspeicherorte durch das Semikolonzeichen (;
) getrennt. Auf Nicht-Windows-Plattformen trennt der Doppelpunkt (:
) die Ordnerspeicherorte in der Umgebungsvariablen.PATHEXT
Die
$env:PATHEXT
Variable enthält eine Liste der Dateierweiterungen, die Windows als ausführbare Dateien betrachtet. Wenn eine Skriptdatei mit einer der aufgeführten Erweiterungen über PowerShell ausgeführt wird, wird das Skript in der aktuellen Konsole oder Terminalsitzung ausgeführt. Wenn die Dateierweiterung nicht aufgeführt ist, wird das Skript in einer neuen Konsolensitzung ausgeführt.Um sicherzustellen, dass Skripts für eine andere Skriptsprache in der aktuellen Konsolensitzung ausgeführt werden, fügen Sie die dateierweiterung hinzu, die von der Skriptsprache verwendet wird. Um beispielsweise Python-Skripts in der aktuellen Konsole auszuführen, fügen Sie die
.py
Erweiterung der Umgebungsvariablen hinzu. Damit Windows die.py
Erweiterung als ausführbare Datei unterstützt, müssen Sie die Dateierweiterung mit denftype
Befehlen undassoc
der CMD-Befehlsshell registrieren. PowerShell verfügt über keine direkte Methode zum Registrieren des Dateihandlers. Weitere Informationen finden Sie in der Dokumentation zum Befehl ftype .PowerShell-Skripts beginnen immer in der aktuellen Konsolensitzung. Sie müssen die
.PS1
Erweiterung nicht hinzufügen.XDG-Variablen
Auf Nicht-Windows-Plattformen verwendet PowerShell die folgenden XDG-Umgebungsvariablen, wie in der XDG-Basisverzeichnisspezifikation definiert.
- XDG_CONFIG_HOME
- XDG_DATA_HOME
- XDG_CACHE_HOME
Terminalfeatures
Ab PowerShell 7.2 können die folgenden Umgebungsvariablen verwendet werden, um die Features des virtuellen Terminals zu steuern, z. B. ANSI-Escapesequenzen, die die Ausgabe färben. Die Unterstützung für ANSI-Escapesequenzen kann mithilfe der Umgebungsvariablen TERM oder NO_COLOR deaktiviert werden.
BEGRIFF
Die folgenden Werte von
$env:TERM
ändern so das Verhalten:dumb
-Legt$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-Legt$PSStyle.OutputRendering = PlainText
xtermm
-Legt$PSStyle.OutputRendering = PlainText
NO_COLOR
Wenn
$env:NO_COLOR
vorhanden, wird auf$PSStyle.OutputRendering
PlainText festgelegt. Weitere Informationen zur umgebungsvariablen NO_COLOR finden Sie unter https://no-color.org/.