about_Environment_Variables

Kurze Beschreibung

Beschreibt den Zugriff auf Windows Umgebungsvariablen in PowerShell.

Lange Beschreibung

Umgebungsvariablen speichern Informationen zur Betriebssystemumgebung. Diese Informationen umfassen Details wie den Betriebssystempfad, die Anzahl der vom Betriebssystem verwendeten Prozessoren und den Speicherort temporärer Ordner.

Die Umgebungsvariablen speichern Daten, die vom Betriebssystem und anderen Programmen verwendet werden. Die WINDIR Umgebungsvariable enthält z. B. den Speicherort des Windows Installationsverzeichnis. Programme können den Wert dieser Variablen abfragen, um zu bestimmen, wo sich Windows Betriebssystemdateien befinden.

PowerShell kann auf Umgebungsvariablen auf allen unterstützten Betriebssystemplattformen zugreifen und diese verwalten. Der PowerShell-Umgebungsanbieter vereinfacht diesen Prozess, indem er das Anzeigen und Ändern von Umgebungsvariablen vereinfacht.

Umgebungsvariablen werden im Gegensatz zu anderen Variablentypen in PowerShell 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.

Verwenden und Ändern von Umgebungsvariablen

Auf Windows können Umgebungsvariablen in drei Geltungsbereichen 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 von Variablen wird vom übergeordneten Prozess geerbt und aus den Variablen im Bereich Computer und Benutzer erstellt. Unix-basierte Plattformen haben nur den Bereich Prozess.

Sie können die Werte von Umgebungsvariablen anzeigen und ändern, ohne ein Cmdlet zu verwenden, indem Sie eine Variablensyntax mit dem Umgebungsanbieter verwenden. Verwenden Sie die folgende Syntax, um den Wert einer Umgebungsvariablen anzuzeigen:

$Env:<variable-name>

Geben Sie beispielsweise den folgenden Befehl an der PowerShell-Eingabeaufforderung ein, um den Wert der WINDIR Umgebungsvariablen anzuzeigen:

$Env:windir

In dieser Syntax gibt das Dollarzeichen ( ) eine Variable an, und der Laufwerkname ( ) gibt eine Umgebungsvariable gefolgt vom $ Env: Variablennamen ( ) windir an.

Wenn Sie Umgebungsvariablen in PowerShell ändern, wirkt sich die Änderung nur auf die aktuelle Sitzung aus. Dieses Verhalten ähnelt dem Verhalten des Befehls in der Windows-Befehlsshell und des Befehls Set Setenv 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 computerspezifischen Variablen 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.

Sie können die Werte von Variablen ändern, ohne ein Cmdlet mit der folgenden Syntax zu verwenden:

$Env:<variable-name> = "<new-value>"

Verwenden Sie beispielsweise die folgende Syntax, um an den Wert ;c:\temp der Umgebungsvariablen angefügt zu Path werden:

$Env:Path += ";c:\temp"

Unter Linux oder macOS trennt der Doppelpunkt ( ) im Befehl den neuen Pfad von dem Pfad, der ihm in der : Liste voran steht.

$Env:PATH += ":/usr/local/temp"

Sie können auch die Item-Cmdlets wie Set-Item Remove-Item , und verwenden, um die Werte von Copy-Item Umgebungsvariablen zu ändern. Verwenden Sie beispielsweise die folgende Syntax, um das Cmdlet zum Anfügen an den Wert der Set-Item ;c:\temp Path Umgebungsvariablen zu verwenden:

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

In diesem Befehl wird der Wert in Klammern eingeschlossen, sodass er als Einheit interpretiert wird.

Verwalten von Umgebungsvariablen

PowerShell bietet verschiedene Methoden zum Verwalten von Umgebungsvariablen.

  • Das Laufwerk des Umgebungsanbieters
  • Die Item-Cmdlets
  • Die .NET System.Environment-Klasse
  • Auf Windows wird das Systemsteuerung

Verwenden des Umgebungsanbieters

Jede Umgebungsvariable wird durch eine Instanz der System.Collections.DictionaryEntry-Klasse dargestellt. In jedem DictionaryEntry-Objekt ist der Name der Umgebungsvariable der Wörterbuchschlüssel. Der Wert der Variablen ist der Wörterbuchwert.

Verwenden Sie das Cmdlet , um die Eigenschaften und Methoden des Objekts anzuzeigen, das eine Umgebungsvariable in PowerShell Get-Member darstellt. Geben Sie beispielsweise Folgendes ein, um die Methoden und Eigenschaften aller Objekte auf dem Env: Laufwerk anzuzeigen:

Get-Item -Path Env:* | Get-Member

Mit dem PowerShell-Umgebungsanbieter können Sie auf Umgebungsvariablen in einem PowerShell-Laufwerk (laufwerk) Env: zugreifen. Dieses Laufwerk sieht ähnlich wie ein Dateisystemlaufwerk aus. Um zum Laufwerk zu Env: wechseln, geben Sie Ein:

Set-Location Env:

Verwenden Sie die Content-Cmdlets zum Abrufen oder Festlegen der Werte einer Umgebungsvariablen.

PS Env:\> Set-Content -Path Test -Value 'Test value'
PS Env:\> Get-Content -Path Test
Test value

Sie können die Umgebungsvariablen auf dem Laufwerk von jedem anderen PowerShell-Laufwerk aus anzeigen, und Sie können auf das Laufwerk wechseln, um die Umgebungsvariablen zu anzeigen Env: Env: und zu ändern.

Verwenden von Item-Cmdlets

Wenn Sie auf eine Umgebungsvariable verweisen, geben Sie den Env: Laufwerksnamen gefolgt vom Namen der Variablen ein. Geben Sie beispielsweise Folgendes ein, um den Wert der COMPUTERNAME Umgebungsvariablen anzuzeigen:

Get-ChildItem Env:Computername

Geben Sie Zum Anzeigen der Werte aller Umgebungsvariablen Ein:

Get-ChildItem Env:

Da Umgebungsvariablen keine untergeordneten Elemente haben, ist die Ausgabe Get-Item von und Get-ChildItem identisch.

Standardmäßig zeigt PowerShell die Umgebungsvariablen in der Reihenfolge an, in der sie abgerufen werden. Um die Liste der Umgebungsvariablen nach Variablenname zu sortieren, übergeben Sie die Ausgabe eines Befehls Get-ChildItem an das Sort-Object Cmdlet. Geben Sie beispielsweise auf einem beliebigen PowerShell-Laufwerk Folgendes ein:

Get-ChildItem Env: | Sort Name

Sie können auch mithilfe des Env: Cmdlets auf das Laufwerk Set-Location wechseln:

Set-Location Env:

Wenn Sie sich auf dem Env: Laufwerk befinden, können Sie den Namen des Env: Laufwerks aus dem Pfad weglassen. Geben Sie beispielsweise Folgendes ein, um alle Umgebungsvariablen anzuzeigen:

PS Env:\> Get-ChildItem

Geben Sie Zum Anzeigen des Werts COMPUTERNAME der Variablen aus dem Laufwerk Env: Ein:

PS Env:\> Get-ChildItem ComputerName

Speichern von Änderungen an Umgebungsvariablen

Um eine persistente Änderung an einer Umgebungsvariablen auf Windows, verwenden Sie die Systemsteuerung. Wählen Sie Erweitertes System Einstellungen. Klicken Sie auf der Registerkarte Erweitert auf Umgebungsvariable.... Sie können vorhandene Umgebungsvariablen im Bereich Benutzer und System (Computer) hinzufügen oder bearbeiten. Windows schreibt diese Werte in die Registrierung, sodass sie sitzungs- und systemübergreifende Neustarts beibehalten werden.

Alternativ können Sie Umgebungsvariablen in Ihrem PowerShell-Profil hinzufügen oder ändern. Diese Methode funktioniert für jede Version von PowerShell auf jeder unterstützten Plattform.

Verwenden von System.Environment-Methoden

Die System.Environment-Klasse stellt die Methoden GetEnvironmentVariable und SetEnvironmentVariable zur Angabe des Variablenbereichs zur Anwendung.

Im folgenden Beispiel wird die GetEnvironmentVariable-Methode verwendet, um die Computereinstellung von und die PSModulePath SetEnvironmentVariable-Methode zum Hinzufügen des Pfads zum C:\Program Files\Fabrikam\Modules Wert zu erhalten.

$path = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine')
$newpath = $path + ';C:\Program Files\Fabrikam\Modules'
[Environment]::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')

Weitere Informationen zu den Methoden der System.Environment-Klasse finden Sie unter Umgebungsmethoden.

Umgebungsvariablen von PowerShell

PowerShell-Features können Umgebungsvariablen verwenden, um Benutzereinstellungen zu speichern. Diese Variablen funktionieren wie Einstellungsvariablen, werden jedoch 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 die Ausführungsrichtlinie, die für die aktuelle Sitzung festgelegt wurde. 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 zu festlegen.

    • 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 einige Zeit nach dem Importieren eines Moduls in einen Hintergrundthread geschrieben.

    Der Standardspeicherort des Caches ist:

    • Windows PowerShell 5.1: $env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 und höher: $env:LOCALAPPDATA\Microsoft\PowerShell
    • Nicht standardmäßig Windows Standardeinstellung:~/.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 es einen eindeutigen Dateinamen pro Installation gibt.

    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 mithilfe einer Ablaufverfolgung 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 1 festlegen.

    Das Festlegen dieser Umgebungsvariablen wird sofort im aktuellen Prozess wirksam.

  • PSModulePath

    Die $env:PSModulePath Umgebungsvariable enthält eine Liste der Ordnerspeicherorte, die nach Modulen und Ressourcen durchsucht werden.

    Standardmäßig sind folgende Standorte effektiv $env:PSModulePath zugewiesen:

    • Systemweite Speicherorte: Diese Ordner enthalten Module, die mit PowerShell versendet werden. Die Module werden am $PSHOME\Modules Speicherort gespeichert. Außerdem ist dies der Speicherort, an dem die Windows-Verwaltungsmodule installiert sind.

    • Vom Benutzer installierte Module: Dies sind Module, die vom Benutzer installiert werden. 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.

      • Auf Windows ist der Speicherort des benutzerspezifischen CurrentUser-Bereichs der $HOME\Documents\PowerShell\Modules Ordner. Der Speicherort des Bereichs AllUsers ist $env:ProgramFiles\PowerShell\Modules .
      • Auf Systemen ohne Windows ist der Speicherort des benutzerspezifischen CurrentUser-Bereichs der $HOME/.local/share/powershell/Modules Ordner . Der Speicherort des Bereichs AllUsers 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.

  • 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_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 von LTS-Releases (Long-Term Servicing, langfristige Wartung).

    Weitere Informationen finden Sie unter about_Update_Notifications.

  • POWERSHELL_TELEMETRY_OPTOUT

    Legen Sie zum Deaktivieren der Telemetrie die Umgebungsvariable auf true , yes oder 1 fest.

    Weitere Informationen finden Sie unter about_Telemetry.

Umgebungsvariablen von Drittanbietern

Auf Nicht-Windows-Plattformen verwendet PowerShell die folgenden XDG-Umgebungsvariablen gemäß der XDG-Basisverzeichnisspezifikation.

  • XDG_CONFIG_HOME
  • XDG_DATA_HOME
  • XDG_CACHE_HOME

Siehe auch