Share via


about_Environment_Variables

Kurze Beschreibung

Beschreibt, wie Sie in PowerShell auf Umgebungsvariablen zugreifen und diese verwalten.

Lange Beschreibung

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. Mit dem PowerShell-Umgebungsanbieter können Sie Umgebungsvariablen in der aktuellen Konsole abrufen, hinzufügen, ändern, löschen und löschen.

Umgebungsvariablen werden im Gegensatz zu anderen Variablentypen in PowerShell immer als Zeichenfolge gespeichert und dürfen nicht leer sein. Im Gegensatz zu anderen Variablen werden sie von untergeordneten Prozessen geerbt, z. B. von lokalen Hintergrundaufträgen und den Sitzungen, in denen Modulmember 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 im aktuellen Prozess oder in der PowerShell-Sitzung verfügbar sind. Diese Liste der Variablen 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 vornehmen zu können, 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
  • Umgebungsanbieter und Item-Cmdlets
  • 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 und der Laufwerksname (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!

Da es sich bei einer Umgebungsvariablen nicht um eine leere Zeichenfolge handeln kann, wird sie durch Festlegen einer auf $null oder einer leeren Zeichenfolge 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, weil 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 des Umgebungsanbieters und der Item-Cmdlets

Der Umgebungsanbieter von PowerShell bietet Ihnen eine Schnittstelle für die Interaktion mit Umgebungsvariablen in einem Format, das einem Dateisystemlaufwerk ähnelt. Damit können Sie 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-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".

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 Umgebungsvariable abzurufen und zu ändern.

Im folgenden Beispiel wird eine neue Umgebungsvariable erstellt, Foomit dem Wert und Bar anschließend 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.

Speichern von Änderungen an Umgebungsvariablen

Unter Windows gibt es drei Methoden, um eine permanente Änderung an einer Umgebungsvariable vorzunehmen: Festlegen der Variablen in Ihrem Profil, Verwendung der SetEnvironmentVariable-Methode und Verwendung des System-Systemsteuerung.

Speichern 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 Semikolons (;) 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.

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. Sowohl der Computer- als auch der Benutzerbereich bleiben außerhalb des aktuellen Prozesses erhalten, sodass Sie eine neue oder geänderte Umgebungsvariable speichern können.

So speichern Sie beispielsweise eine neue Umgebungsvariable Foo mit dem Wert Barim Computerbereich:

[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, damit sie über Sitzungen und Systemneustarts hinweg beibehalten werden.

So ändern Sie eine umgebungsvariable Umgebungsvariable unter Windows mit dem system Systemsteuerung:

  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.

Umgebungsvariablen von PowerShell

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:

  • 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".

      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 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. Ä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 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 sofort im aktuellen Prozess wirksam.

  • PSModulePath

    Die Umgebungsvariable $env:PSModulePath enthält eine Liste von Ordnerspeicherorten, die nach Modulen und Ressourcen gesucht werden.

    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.

  • 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 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)

    Weitere Informationen finden Sie unter about_Update_Notifications.

  • POWERSHELL_TELEMETRY_OPTOUT

    Legen Sie zum Deaktivieren von Telemetriedaten die Umgebungsvariable auf , yesoder 1festtrue.

    Weitere Informationen finden Sie unter about_Telemetry.

Andere Umgebungsvariablen, die von PowerShell verwendet werden

Pfadinformationen

  • 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

Weitere Informationen