Freigeben über


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-Itemkopieren, den Wert einer Umgebungsvariable mit Set-Itemfestlegen, Umgebungsvariablen mit Get-Itemauflisten und die Umgebungsvariable mit Remove-Itemlö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 Foodem 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 Barim 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:

  1. Öffnen Sie die system Systemsteuerung.
  2. Klicken Sie auf System.
  3. Wählen Sie Erweiterte Systemeinstellungen aus.
  4. Wechseln Sie zur Registerkarte Erweitert .
  5. Wählen Sie Umgebungsvariablen... aus.
  6. 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 , yesoder 1festtrue. 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 Nichtdefinition POWERSHELL_UPDATECHECKvon :
      • 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.

    Darüber hinaus können Setupprogramme, die Module in anderen Verzeichnissen installieren, z. B. das Verzeichnis Programme, ihre Speicherorte an den Wert von $env:PSModulePathanfü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
    }
    
  • 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 1festlegen.

    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 den ftype Befehlen und assoc 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.OutputRenderingPlainText festgelegt. Weitere Informationen zur umgebungsvariablen NO_COLOR finden Sie unter https://no-color.org/.

Weitere Informationen