Articles

Über Umgebungsvariablen

  • 22.09.2020
  • 8 Minuten zu lesen
    • S
    • r
    • s
    • d
    • c
    • +1
  • KURZBESCHREIBUNG

    Beschreibt den Zugriff auf Windows-Umgebungsvariablen in PowerShell.

    LANGBESCHREIBUNG

    Umgebungsvariablen speichern Informationen über die Umgebung des Betriebssystems. Diese Informationen umfassen Details wie den Betriebssystempfad, die Anzahl der vom Betriebssystem verwendeten Prozessoren und den Speicherort von temporären Ordnern.

    Die Umgebungsvariablen speichern Daten, die vom Betriebssystem und anderen Programmen verwendet werden. Zum Beispiel enthält die Umgebungsvariable WINDIR den Ort des Windows-Installationsverzeichnisses. Programme können den Wert dieser Variablen abfragen, um festzustellen, wo sich die Windows-Betriebssystemdateien befinden.

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

    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:

    • Bereich „Maschine“ (oder „System“)
    • Bereich „Benutzer“
    • Bereich „Prozess“

    Der Bereich „Prozess“ enthält die Umgebungsvariablen, die im aktuellen Prozess oder der PowerShell-Sitzung verfügbar sind. Diese Liste von Variablen wird vom übergeordneten Prozess geerbt und wird aus den Variablen in den Bereichen „Maschine“ und „Benutzer“ erstellt. Unix-basierte Plattformen haben nur den Bereich Process.

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

$Env:<variable-name>

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

$Env:windir

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

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 Command Shell und des Setenv-Befehls in UNIX-basierten Umgebungen. Um Werte im Bereich „Maschine“ oder „Benutzer“ zu ändern, müssen Sie die Methoden der Klasse „System.Environment“ verwenden.

Um Änderungen an Variablen im Bereich „Maschine“ vorzunehmen, müssen Sie ebenfalls eine Berechtigung haben. Wenn Sie versuchen, einen Wert ohne ausreichende Berechtigung zu ändern, schlägt der Befehl fehl und die PowerShell zeigt einen Fehler an.

Sie können die Werte von Variablen ohne Verwendung eines Cmdlets mit der folgenden Syntax ändern:

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

Beispielsweise können Sie den Wert der Path-Umgebungsvariablen mit der folgenden Syntax anhängen:

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

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

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

Sie können auch die Item-Cmdlets wie Set-ItemRemove-Item undCopy-Item verwenden, um die Werte von Umgebungsvariablen zu ändern. Um beispielsweise das Cmdlet Set-Item zu verwenden, um ;c:\temp an den Wert der PathUmgebungsvariablen anzuhängen, verwenden Sie die folgende Syntax:

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

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

Umgebungsvariablen, die Präferenzen speichern

PowerShell-Funktionen können Umgebungsvariablen verwenden, um Benutzerpräferenzen zu speichern. Diese Variablen funktionieren wie Präferenzvariablen, werden jedoch an untergeordnete Sitzungen der Sitzungen vererbt, in denen sie erstellt wurden. Weitere Informationen zu Einstellungsvariablen finden Sie unter about_preference_variables.

Zu den Umgebungsvariablen, die Einstellungen speichern, gehören:

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

    • Starten Sie eine Sitzung über die Befehlszeile mit dem Parameter ExecutionPolicyparameter, um die Ausführungsrichtlinie für die Sitzung festzulegen.

    • Verwenden Sie das Cmdlet Set-ExecutionPolicy. Verwenden Sie den Scope-Parameter mit dem Wert „Process“.

      Weitere Informationen finden Sie unter about_Execution_Policies.

  • PSModuleAnalysisCachePath

    PowerShell bietet eine Steuerung für die Datei, die zum Zwischenspeichern von Daten über Module und ihre Cmdlets verwendet wird. Der Cache wird beim Start während der Suche nach einem Befehl gelesen und irgendwann nach dem Importieren eines Moduls in einem Hintergrundthread geschrieben.

    Der Standardspeicherort des Cache ist:

    • 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 Standard-Dateiname für den Cache ist ModuleAnalysisCache. Wenn Sie mehrere Instanzen von PowerShell installiert haben, enthält der Dateiname einhexadezimales Suffix, damit es einen eindeutigen Dateinamen pro Installation gibt.

    Hinweis

    Wenn die Befehlserkennung nicht richtig funktioniert, z. B. Intellisens zeigt Befehle an, die nicht existieren, können Sie die Cache-Datei löschen. Der Cache wird beim nächsten Start der PowerShell neu erstellt.

    Um den Standardspeicherort des Caches zu ändern, setzen Sie die Umgebungsvariablevor dem Start der PowerShell. Änderungen an dieser Umgebungsvariablen wirken sich nur auf Child-Prozesse aus. Der Wert sollte einen vollständigen Pfad (einschließlich Dateiname) nennen, für den PowerShell die Berechtigung zum Erstellen und Schreiben von Dateien hat.

    Um den Dateicache zu deaktivieren, setzen Sie diesen Wert auf einen ungültigen Speicherort, z. B.:

    # `NUL` here is a special device on Windows that cannot be written to,# on non-Windows you would use `/dev/null`$env:PSModuleAnalysisCachePath = 'NUL'

    Damit wird der Pfad auf das NUL-Gerät gesetzt. PowerShell kann nicht in den Pfad schreiben, aber es wird kein Fehler zurückgegeben. Sie können die gemeldeten Fehler mit atracer sehen:

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

    Beim Ausschreiben des Modulanalyse-Caches prüft PowerShell auf nicht mehr vorhandene Module, 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 den Wert dieser Umgebungsvariablen auf 1 setzen.

    Das Setzen dieser Umgebungsvariablen wird sofort im aktuellen Prozess wirksam.

  • PSModulePath

    Die $env:PSModulePathUmgebungsvariable enthält eine Liste von Ordnerspeicherorten, die durchsucht werden, um Module und Ressourcen zu finden.

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

    • Systemweite Speicherorte: Diese Ordner enthalten Module, die mitPowerShell ausgeliefert werden. Die Module werden im Speicherort $PSHOME\Modules gespeichert. Außerdem werden an diesem Speicherort die Windows-Verwaltungsmodule installiert.

    • Benutzer-installierte Module: Dies sind Module, die vom Benutzer installiert werden.Install-Module hat einen Scope-Parameter, mit dem Sie festlegen können, ob das Modul für den aktuellen Benutzer oder für alle Benutzer installiert wird. Weitere Informationen finden Sie unter Install-Module.

      • Unter Windows ist der Speicherort des benutzerspezifischen Bereichs CurrentUser der Ordner $HOME\Documents\PowerShell\Modules. Der Speicherort des Bereichs „AllUsers“ ist $env:ProgramFiles\PowerShell\Modules.
      • Auf Nicht-Windows-Systemen ist der Speicherort des benutzerspezifischen Bereichs „CurrentUsers“ der Ordner $HOME/.local/share/powershell/Modules. Der Speicherort des Bereichs „AllUsers“ ist /usr/local/share/powershell/Modules.

    Zusätzlich können Setup-Programme, die Module in anderen Verzeichnissen installieren, z. B. im Verzeichnis „Programme“, deren Speicherorte an den Wert von$env:PSModulePath anhängen.

    Weitere Informationen finden Sie unter about_PSModulePath.

Verwalten von Umgebungsvariablen

PowerShell bietet mehrere verschiedene Methoden zum Verwalten von Umgebungsvariablen.

  • Das Umgebungsanbieterlaufwerk
  • Die Item-Cmdlets
  • Die .NET System.Environment-Klasse
  • Unter Windows die Systemsteuerung

Verwenden des Environment-Anbieters

Jede Umgebungsvariable wird durch eine Instanz derSystem.Collections.DictionaryEntry-Klasse dargestellt. In jedem DictionaryEntry-Objekt ist der Name der Umgebungsvariablen der Schlüssel des Dictionarys. Der Wert der Variablen ist der Dictionary-Wert.

Um die Eigenschaften und Methoden des Objekts, das eine Umgebungsvariable darstellt, in PowerShell anzuzeigen, verwenden Sie das Cmdlet Get-Member. Um beispielsweise die Methoden und Eigenschaften aller Objekte im Laufwerk Env: anzuzeigen, geben Sie ein:

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

Mit dem PowerShell-Umgebungsanbieter können Sie auf Umgebungsvariablen in einem PowerShell-Laufwerk (dem Laufwerk Env:) zugreifen. Dieses Laufwerk sieht ähnlich aus wie ein Dateisystemlaufwerk. Um zum Env:-Laufwerk zu wechseln, geben Sie 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 TestTest value

Sie können die Umgebungsvariablen im Laufwerk Env: von jedem anderenPowerShell-Laufwerk aus anzeigen, und Sie können in das Laufwerk Env: wechseln, um die Umgebungsvariablen anzuzeigen und zu ändern.

Verwenden von Element-Cmdlets

Wenn Sie sich auf eine Umgebungsvariable beziehen, geben Sie den Env:-Laufwerksnamen gefolgt vom Namen der Variablen ein. Um zum Beispiel den Wert derCOMPUTERNAME Umgebungsvariablen anzuzeigen, geben Sie ein:

Get-ChildItem Env:Computername

Um die Werte aller Umgebungsvariablen anzuzeigen, geben Sie ein:

Get-ChildItem Env:

Da Umgebungsvariablen keine untergeordneten Elemente haben, ist die Ausgabe von Get-Itemund Get-ChildItem die gleiche.

Standardmäßig zeigt PowerShell die Umgebungsvariablen in der Reihenfolge an, in der es sie abruft. Um die Liste der Umgebungsvariablen nach Variablennamen zu sortieren, übergeben Sie die Ausgabe eines Get-ChildItem-Befehls über die Pipeline an das Cmdlet Sort-Object. Geben Sie beispielsweise von einem beliebigen PowerShell-Laufwerk aus Folgendes ein:

Get-ChildItem Env: | Sort Name

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

Set-Location Env:

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

PS Env:\> Get-ChildItem

Um den Wert der COMPUTERNAME-Variable aus dem Env:-Laufwerk anzuzeigen, geben Sie ein:

PS Env:\> Get-ChildItem ComputerName

Änderungen an Umgebungsvariablen speichern

Um eine dauerhafte Änderung an einer Umgebungsvariablen unter Windows vorzunehmen, verwenden Sie dieSystemsteuerung. Wählen Sie Erweiterte Systemeinstellungen. Klicken Sie auf der Registerkarte Erweitert auf Umgebungsvariable….. Sie können vorhandene Umgebungsvariablen in den Bereichen Benutzer und System (Maschine) hinzufügen oder bearbeiten. Windows schreibt diese Werte in die Registrierung, sodass sie über Sitzungen und Systemneustarts hinweg bestehen bleiben.

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 Klasse System.Environment bietet GetEnvironmentVariable- undSetEnvironmentVariable-Methoden, mit denen Sie den Bereich der Variablen angeben können.

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

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

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

Siehe auch

  • Environment (Anbieter)
  • über_Module

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.