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
Vollständige Beschreibungen dieser Variablen finden Sie in den PowerShell-Umgebungsvariablen dieses Artikels.
Lange Beschreibung
PowerShell kann auf Umgebungsvariablen auf einer der unterstützten Betriebssystemplattformen 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 Namen von Umgebungsvariablen unter macOS und Linux die Groß-/Kleinschreibung beachtet. Beispielsweise $env:Path
sind sie $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 von untergeordneten Prozessen geerbt, z. B. lokale Hintergrundaufträge und die 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 erforderlich sind.
Unter Windows können Umgebungsvariablen in drei Bereichen definiert werden:
- Computerbereich (oder Systembereich)
- Benutzerbereich
- Prozessumfang
Der Prozessbereich enthält die Umgebungsvariablen, die im aktuellen Prozess oder in der PowerShell-Sitzung verfügbar sind. Diese Liste der Variablen wird vom übergeordneten Prozess geerbt und wird aus den Variablen im Computer - und Benutzerbereich 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 dem setenv
Befehl in UNIX-basierten Umgebungen. Zum Ändern von Werten im Computer- oder Benutzerbereich müssen Sie die Methoden der System.Environment-Klasse verwenden.
Um Änderungen an Computervariablen 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 zum Verwenden und Verwalten von Umgebungsvariablen.
- Die Variablesyntax
- Die Cmdlets "Umgebungsanbieter" und "Item"
- 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 WINDIR
Umgebungsvariablen an:
$Env:windir
C:\Windows
In dieser Syntax gibt das Dollarzeichen ($
) eine Variable an, und der Laufwerkname (Env:
) gibt 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. Zum 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. Zum 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
gibt einen Fehler zurück, da die Umgebungsvariable entfernt wurde.
Sie können sehen, dass kein Fehler zurückgegeben wird, 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 "Umgebung" und "Item"
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 z. B. die Foo
Umgebungsvariable 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
, Listenumgebungsvariablen mit Get-Item
und löschen die Umgebungsvariable mit Remove-Item
.
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()
Und SetEnvironmentVariable()
Methoden zum Abrufen und Ändern von Umgebungsvariablen bereit.
Im folgenden Beispiel wird eine neue Umgebungsvariable Foo
mit einem Wert von Bar
und anschließend dessen Wert erstellt.
[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 "Environment Methods".
Erstellen persistenter Umgebungsvariablen in Windows
Unter Windows gibt es drei Methoden, um eine dauerhafte Änderung an einer Umgebungsvariable vorzunehmen:
- Legen Sie sie in Ihrem Profil fest
- Verwenden der
SetEnvironmentVariable()
Methode - Verwenden des System-Systemsteuerung
Festlegen von Umgebungsvariablen in Ihrem Profil
Jede Umgebungsvariable, die Sie in Ihrem PowerShell-Profil hinzufügen oder ändern, ist in jeder Sitzung verfügbar, die Ihr Profil lädt. Diese Methode funktioniert für jede Version von PowerShell auf jeder unterstützten Plattform.
Wenn Sie beispielsweise die Umgebungsvariable CompanyUri
erstellen und die Path
Umgebungsvariable aktualisieren möchten, um den C:\Tools
Ordner einzuschließen, 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 Semikolons;
() verwendet, um einen neuen Pfad vom Pfad zu trennen, der ihm in der Liste vorausgeht.
Sie können den Pfad zu Ihrem PowerShell-Profil mit der $PROFILE
automatischen 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. Der Computer und der Benutzerbereich bleiben außerhalb des aktuellen Prozesses erhalten, sodass Sie eine neue oder geänderte Umgebungsvariable speichern können.
Wenn Sie beispielsweise eine neue Umgebungsvariable Foo
mit dem Wert Bar
im Computerbereich speichern möchten:
[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 in den Bereichen 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 Umgebungsvariable unter Windows unter Verwendung des System-Systemsteuerung vor:
- Öffnen Sie das System-Systemsteuerung.
- Wählen Sie System aus.
- Wählen Sie "Erweiterte Systemeinstellungen" aus.
- Wechseln Sie zur Registerkarte "Erweitert ".
- Wählen Sie Umgebungsvariablen... aus.
- Nehmen Sie Ihre Änderungen vor.
Erstellen persistenter Umgebungsvariablen auf Nicht-Windows-Plattformen
Linux und macOS verfügen über Konfigurationsdateien und Skripts, die vom Betriebssystem zum Festlegen von Umgebungsvariablen verwendet werden, bevor Sie eine Anwendung starten.
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 hinzufügen oder ein Skript erstellen, das Umgebungsvariablen /etc/environment
festlegt und in den /etc/profile.d
Ordner einfügen kann. Unter macOS können Sie der /etc/profile
Datei Umgebungsvariablen hinzufügen.
Beim Starten von PowerShell aus einer anderen Shell können Sie Umgebungsvariablen in den shellspezifischen Initialisierungsdateien definieren, die von Nicht-Login-Shells 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 Einstellungsvariablen, 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
Wenn Sie telemetrie deaktivieren möchten, legen Sie die Umgebungsvariable auf
true
, oderyes
1
. 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 an Microsoft gesendeten Telemetriedaten enthalten. 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 UpdatebenachrichtigungsfeatureDefault
ist identisch mit der DefinitionPOWERSHELL_UPDATECHECK
:- GA-Releases benachrichtigen zu Updates von GA-Releases.
- Vorschau-/RC-Releases benachrichtigen zu Updates von GA- und Vorschau-Releases.
LTS
benachrichtigt nur updates für long-term-servicing (LTS) GA-Versionen
Nicht standardmäßige Werte der Umgebungsvariable müssen vor dem Starten des PowerShell-Prozesses festgelegt werden. Informationen zum Erstellen persistenter Umgebungsvariablen finden Sie in den vorherigen Abschnitten.
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. Sie können dies auf zwei verschiedene Arten tun.
Starten Sie eine Sitzung über die Befehlszeile, indem Sie den ExecutionPolicy-Parameter verwenden, um die Ausführungsrichtlinie für die Sitzung festzulegen.
Verwenden Sie das
Set-ExecutionPolicy
-Cmdlet. Verwenden Sie den Scope-Parameter mit einem Wert vonProcess
.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 Informationen zu Ausführungsrichtlinien.
PSModulePath
Die
$env:PSModulePath
Umgebungsvariable enthält eine Liste der Ordnerspeicherorte, die durchsucht werden, um Module und Ressourcen zu finden. Unter Windows wird die Liste der Ordnerspeicherorte durch das Semikolonszeichen (;
) getrennt. Auf Nicht-Windows-Plattformen trennt der Doppelpunkt (:
) die Ordnerspeicherorte in der Umgebungsvariable.Standardmäßig sind die zugewiesenen
$env:PSModulePath
effektiven Speicherorte:Systemweite Speicherorte: Diese Ordner enthalten Module, die mit PowerShell ausgeliefert werden. Die Module werden an der
$PSHOME\Modules
Position gespeichert. Außerdem ist dies der Speicherort, an dem die Windows-Verwaltungsmodule installiert sind.Vom Benutzer installierte Module: Hierbei handelt es sich um vom Benutzer installierte Module.
Install-Module
verfügt über einen Bereichsparameter , 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 ihren Cmdlets verwendet wird. Der Cache wird beim Starten gelesen, während er nach einem Befehl sucht und irgendwann nach dem Importieren eines Moduls in einen Hintergrundthread geschrieben wird.
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 lautet
ModuleAnalysisCache
. Wenn Sie mehrere Instanzen von PowerShell installiert haben, enthält der Dateiname ein Hexadezimalsuffix, sodass pro Installation ein eindeutiger Dateiname vorhanden ist.Hinweis
Wenn die Befehlsermittlung nicht ordnungsgemäß funktioniert, z. B. zeigt IntelliSense Befehle an, 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. 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 Umgebungsvariable 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 sehen:
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 Prüfungen nicht wünschenswert, in diesem Fall können Sie sie deaktivieren, indem Sie diesen Umgebungsvariablenwert auf
1
festlegen.Das Festlegen dieser Umgebungsvariable wird für nachfolgende Bereinigungsereignisse im aktuellen Prozess wirksam. Um sicherzustellen, dass die Bereinigung beim Start deaktiviert ist, müssen Sie die Umgebungsvariable vor dem Starten von PowerShell festlegen. Informationen zum Erstellen persistenter Umgebungsvariablen finden Sie in den vorherigen Abschnitten.
Andere Umgebungsvariablen, die von PowerShell verwendet werden
Pfadinformationen
PATH
Die
$env:PATH
Umgebungsvariable enthält eine Liste der Ordnerspeicherorte, nach denen das Betriebssystem nach ausführbaren Dateien sucht. Unter Windows wird die Liste der Ordnerspeicherorte durch das Semikolonszeichen (;
) getrennt. Auf Nicht-Windows-Plattformen trennt der Doppelpunkt (:
) die Ordnerspeicherorte in der Umgebungsvariable.PATHEXT
Die
$env:PATHEXT
Variable enthält eine Liste von Dateierweiterungen, die Windows als ausführbare Dateien betrachtet. Wenn eine Skriptdatei mit einer der aufgelisteten Erweiterungen über PowerShell ausgeführt wird, wird das Skript in der aktuellen Konsolen- 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 von der Skriptsprache verwendete Dateierweiterung hinzu. Wenn Sie beispielsweise Python-Skripts in der aktuellen Konsole ausführen möchten, fügen Sie die
.py
Erweiterung zur Umgebungsvariable hinzu. Damit Windows die.py
Erweiterung als ausführbare Datei unterstützt, müssen Sie die Dateierweiterung mit denftype
Befehlen undassoc
Befehlen der CMD-Befehlsshell registrieren. PowerShell verfügt nicht über eine direkte Methode zum Registrieren des Dateihandlers. Weitere Informationen finden Sie in der Dokumentation für den Befehl "ftype ".PowerShell-Skripts beginnen immer in der aktuellen Konsolensitzung. Sie müssen die
.PS1
Erweiterung nicht hinzufügen.XDG
-VariablenAuf Nicht-Windows-Plattformen verwendet PowerShell die folgenden XDG-Umgebungsvariablen gemäß der XDG-Basisverzeichnisspezifikation.
XDG_CONFIG_HOME
XDG_DATA_HOME
XDG_CACHE_HOME
Terminalfunktionen
Ab PowerShell 7.2 können die folgenden Umgebungsvariablen verwendet werden, um die Features des virtuellen Terminals wie ANSI-Escapesequenzen zu steuern, die die Ausgabe färben. Die Unterstützung für ANSI-Escapesequenzen kann mit den TERM
Variablen oder NO_COLOR
Umgebungsvariablen deaktiviert werden.
TERM
Die folgenden Werte von
$env:TERM
ändern so das Verhalten:dumb
-garnituren$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-garnituren$PSStyle.OutputRendering = PlainText
xtermm
-garnituren$PSStyle.OutputRendering = PlainText
NO_COLOR
Wenn
$env:NO_COLOR
vorhanden, wird dieser$PSStyle.OutputRendering
Wert aufPlainText
. Weitere Informationen zur UmgebungsvariablenNO_COLOR
finden Sie unter https://no-color.org/.