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 des Umgebungsanbieters und der Cmdlets "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-Itemkopieren, den Wert einer Umgebungsvariable mit Set-Item, Listenumgebungsvariablen mit Get-Itemund 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 Methoden "GetEnvironmentVariable" und "SetEnvironmentVariable" bereit, um Umgebungsvariablen abzurufen und zu ändern.

Im folgenden Beispiel wird eine neue Umgebungsvariable Foomit 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".

Speichern von Änderungen an Umgebungsvariablen

Unter Windows gibt es drei Methoden zum Erstellen einer dauerhaften Änderung an einer Umgebungsvariable: Festlegen der Variablen in Ihrem Profil, Verwenden der SetEnvironmentVariable-Methode und Verwenden des System-Systemsteuerung.

Speichern 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.

Speichern 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 Barim 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')

Speichern von Umgebungsvariablen mit dem 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:

  1. Öffnen Sie das System-Systemsteuerung.
  2. Wählen Sie System aus.
  3. Wählen Sie "Advanced System Einstellungen" aus.
  4. Wechseln Sie zur Registerkarte "Erweitert ".
  5. Wählen Sie Umgebungsvariablen... aus.
  6. Nehmen Sie Ihre Änderungen vor.

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, oder yes1.

    Weitere Informationen finden Sie unter about_Telemetry.

  • 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. Die folgenden Werte werden unterstützt:

    • Off deaktiviert das Updatebenachrichtigungsfeature
    • Default ist identisch mit der Definition POWERSHELL_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

    Weitere Informationen finden Sie unter about_Update_Notifications.

  • 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 von Process.

      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.

    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. Änderungen an dieser Umgebungsvariable 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 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
    }
    
  • 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 1festlegen.

    Das Festlegen dieser Umgebungsvariable wird sofort im aktuellen Prozess wirksam.

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 den ftype Befehlen und assoc 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-Variablen

    Auf 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 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, $PSStyle.OutputRendering wird sie auf "PlainText" festgelegt. Weitere Informationen zur NO_COLOR Umgebungsvariablen finden Sie unter https://no-color.org/.

Weitere Informationen