Freigeben über


Informationen zu Umgebungsvariablen

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

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. Unix-basierte Plattformen verfügen nur über den Prozessbereich .

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 WINDIR der Umgebungsvariablen anzuzeigen:

$Env:windir

In dieser Syntax gibt das Dollarzeichen ($) eine Variable und der Laufwerkname (Env:) eine Umgebungsvariable gefolgt vom 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 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.

Wenn Sie Änderungen an Variablen im Bereich des Computers vornehmen möchten, 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 der Path Umgebungsvariablen anzufügen;c:\temp:

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

Unter Linux oder MacOS trennt der Doppelpunkt (:) im Befehl den neuen Pfad von dem Pfad, der ihm in der Liste vorangestellt ist.

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

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

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.

Umgebungsvariablen, die Einstellungen speichern

PowerShell-Features können Umgebungsvariablen verwenden, um Benutzereinstellungen zu speichern. Diese Variablen funktionieren wie Einstellungsvariablen, werden aber 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. Dies kann auf zwei verschiedene Arten erfolgen.

    • Starten Sie eine Sitzung über die Befehlszeile mithilfe des Parameters ExecutionPolicy , 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 während der Suche nach einem Befehl gelesen und 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 vor dem Starten von PowerShell fest. Ä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 Ablaufverfolgungsmodus gemeldeten Fehler anzeigen:

    Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
    
  • PSDisableModuleAnalysisCacheCleanup

    Beim Schreiben des Modulanalysecaches überprüft PowerShell nach Modulen, die nicht mehr vorhanden sind, um einen unnötig großen Cache zu vermeiden. Manchmal sind diese Überprüfungen nicht erwünscht. In diesem Fall können Sie sie deaktivieren, indem Sie diesen Umgebungsvariablenwert auf 1festlegen.

    Das Festlegen dieser Umgebungsvariablen wird im aktuellen Prozess sofort wirksam.

  • PSModulePath

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

    Standardmäßig sind die folgenden effektiven Speicherorte zugewiesen $env:PSModulePath :

    • Systemweite Speicherorte: Diese Ordner enthalten Module, die mit PowerShell ausgeliefert werden. 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: Hierbei handelt es sich um 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.

Verwalten von Umgebungsvariablen

PowerShell bietet verschiedene Methoden zum Verwalten von Umgebungsvariablen.

  • Laufwerk des Umgebungsanbieters
  • Die Item-Cmdlets
  • Die .NET System.Environment-Klasse
  • Unter Windows Systemsteuerung

Verwenden des Umgebungsanbieters

Jede Umgebungsvariable wird durch eine instance 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 Get-Member eine Umgebungsvariable in PowerShell darstellt. Um beispielsweise die Methoden und Eigenschaften aller Objekte im Env: Laufwerk anzuzeigen, geben Sie Folgendes ein:

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

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

Set-Location Env:

Verwenden Sie die Inhalts-Cmdlets, um die Werte einer Umgebungsvariablen abzurufen oder festzulegen.

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

Sie können die Umgebungsvariablen auf dem Env: Laufwerk von jedem anderen PowerShell-Laufwerk aus anzeigen und auf das Env: Laufwerk wechseln, um die Umgebungsvariablen anzuzeigen 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 Folgendes ein, um die Werte aller Umgebungsvariablen anzuzeigen:

Get-ChildItem Env:

Da Umgebungsvariablen keine untergeordneten Elemente aufweisen, ist die Ausgabe von Get-Item 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 Variablennamen zu sortieren, übergeben Sie die Ausgabe eines Get-ChildItem Befehls an das Sort-Object Cmdlet. Geben Sie beispielsweise von einem beliebigen PowerShell-Laufwerk Folgendes ein:

Get-ChildItem Env: | Sort Name

Sie können auch mit dem Cmdlet auf das Env:Set-Location Laufwerk wechseln:

Set-Location Env:

Wenn Sie sich auf dem Env: Laufwerk befinden, können Sie den Env: Laufwerksnamen im Pfad weglassen. Um beispielsweise alle Umgebungsvariablen anzuzeigen, geben Sie Folgendes ein:

PS Env:\> Get-ChildItem

Geben Sie Folgendes ein, um den Wert der COMPUTERNAME Variablen innerhalb des Laufwerks Env: anzuzeigen:

PS Env:\> Get-ChildItem ComputerName

Speichern von Änderungen an Umgebungsvariablen

Verwenden Sie die System-Systemsteuerung, um eine dauerhafte Änderung an einer Umgebungsvariable unter Windows vorzunehmen. Wählen Sie Erweiterte Systemeinstellungen aus. Klicken Sie auf der Registerkarte Erweitert auf Umgebungsvariable.... Sie können 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.

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 bereit, mit denen Sie den Bereich der Variablen angeben können.

Im folgenden Beispiel wird die GetEnvironmentVariable-Methode verwendet, um die Computereinstellung von PSModulePath abzurufen, und die SetEnvironmentVariable-Methode , um den C:\Program Files\Fabrikam\Modules Pfad zum Wert hinzuzufügen.

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

SIEHE AUCH