PowerShell-Umgebungsvariablen: Eine umfassende Analyse

Die Verwendung von PowerShell zum Festlegen von Windows-Umgebungsvariablen, zum Lesen von Umgebungsvariablen und zum Erstellen neuer Umgebungsvariablen ist einfach, sobald Sie den Trick kennen. Die Tricks, die Sie in diesem Artikel lernen, funktionieren sowohl für Windows 10-Umgebungsvariablen als auch für beliebige Windows-Clients/Server nach Windows 7 SP1/Windows Server 2008.

PowerShell bietet viele verschiedene Möglichkeiten, mit Windows-Umgebungsvariablen über das $env: PSDrive, die Registrierung und die .NET-Klasse [System.Environment] zu interagieren. Sie lernen jede Methode kennen, einschließlich des Verständnisses des Geltungsbereichs von Umgebungsvariablen, in dieser schrittweisen Anleitung.

Annahmen

In diesem Artikel verwende ich Windows PowerShell 5.1 unter Windows 10. Wenn Sie jedoch eine Version von Windows PowerShell ab v3 unter Windows 7 SP1 oder neuer haben, sollten die von mir gezeigten Techniken einwandfrei funktionieren.

Was sind Umgebungsvariablen?

Umgebungsvariablen speichern, wie der Name schon sagt, Informationen über die Umgebung, die von Windows und Anwendungen verwendet wird. Umgebungsvariablen können von grafischen Anwendungen wie dem Windows Explorer und einfachen Texteditoren wie Notepad sowie von cmd.exe und PowerShell abgerufen werden.

Die Verwendung von Umgebungsvariablen hilft Ihnen, das Festkodieren von Dateipfaden, Benutzer- oder Computernamen und vielem mehr in Ihren PowerShell-Skripts oder -Modulen zu vermeiden.

Gemeinsame Umgebungsvariablen

Wenn Sie mehr darüber erfahren, wie Sie mit Umgebungsvariablen in PowerShell arbeiten, stoßen Sie auf viele verschiedene Variablen. Einige sind nützlicher als andere. Nachfolgend finden Sie eine Liste einiger gängiger Umgebungsvariablen und ihrer Verwendung zur Referenz.

Variable Usage
ClientName The name of the remote computer connected via a Remote Desktop session.
SessionName This helps to identify if the current Windows session is regarded by the operating system as running at the console. For console sessions SessionName will be ‘Console’. Enhanced Session connections to Hyper-V Virtual Machines do not report SessionName as ‘Console’, whereas Standard Sessions do.
ComputerName The name of the computer.
SystemRoot and Windir The path to the current Windows installation.
ProgramFiles and ProgramFiles(x86) The default locations for x64 and x86 programs.
ProgramW6432 The default location for programs, avoiding 32/64 bit redirection. This variable only applies for 32 bit processes running on a 64 bit platform. This means that you can use it to identify when a 32 bit instance of PowerShell is running on a 64 bit system.
UserDNSDomain The Fully Qualified Domain Name of the Active Directory domain that the current user logged on to. Only present for domain logons.
UserDomain The NETBIOS-style name of the domain that the current user logged on to. Can be a computer name if there’s no domain.
UserDomainRoamingProfile The location of the central copy of the roaming profile for the user, if any. Only present for domain logons.
UserName The name of the currently logged on user.
UserProfile The location of the profile of the current user on the local computer.

Umgebungsvariablenbereiche

Es gibt drei Bereiche von Umgebungsvariablen. Denken Sie an Bereiche als Ebenen von Variablen, die sich zu einem Gesamtbild zusammensetzen. Zusammen stellen diese „Ebenen“ vielen verschiedenen laufenden Prozessen in Windows Umgebungsvariablen bereit.

Umgebungsvariablenbereich „Hierarchie“

Jede dieser „Ebenen“ kombiniert oder überschreibt einander. Sie sind in einer Hierarchie wie folgt definiert: Rechner –> Benutzer –> Prozess, wobei jede bereichsspezifische Variable die Elternvariable überschreibt, sofern eine in der übergeordneten Ebene existiert.

Zum Beispiel ist eine häufige Umgebungsvariable TEMP. Diese Variable speichert den Ordnerpfad zum lokalen temporären Ordner von Windows. Diese Umgebungsvariable ist wie folgt eingestellt:

  • C:\WINDOWS\TEMP in the machine scope
  • C:\Users\<username>\AppData\Local\Temp in the user scope
  • C:\Users\<username>\AppData\Local\Temp in the process scope.

Wenn im Bereich Benutzer keine Umgebungsvariable TEMP festgelegt ist, lautet das Endergebnis C:\WINDOWS\TEMP.

Arten von Umgebungsvariablenbereichen

Es gibt drei verschiedene Umgebungsvariablenbereiche in Windows.

Rechner

Umgebungsvariablen im Bereich Rechner sind mit der laufenden Instanz von Windows verbunden. Jedes Benutzerkonto kann diese lesen, jedoch müssen zum Festlegen, Ändern oder Löschen erhöhte Berechtigungen verwendet werden.

Benutzer

Umgebungsvaiablen im Benutzer-Bereich sind mit dem Benutzer verknüpft, der den aktuellen Prozess ausführt. Benutzer-Variablen überschreiben maschinen-weite Variablen mit demselben Namen.

Hinweis: Microsoft empfiehlt, dass maschinen- und benutzerspezifische Umgebungsvariablenwerte nicht mehr als 2048 Zeichen enthalten.

Prozess

Umgebungsvariablen im Prozess-Bereich sind eine Kombination der maschinen– und benutzer-spezifischen Bereiche, zusammen mit einigen Variablen, die Windows dynamisch erstellt.

Nachfolgend finden Sie eine Liste der Umgebungsvariablen, die einem laufenden Prozess zur Verfügung stehen. Alle diese Variablen werden dynamisch erstellt.

  • ALLUSERSPROFILE
  • APPDATA
  • COMPUTERNAME
  • HOMEDRIVE
  • HOMEPATH
  • LOCALAPPDATA
  • LOGONSERVER
  • PROMPT
  • PUBLIC
  • SESSION
  • SystemDrive
  • SystemRoot
  • USERDNSDOMAIN
  • USERDOMAIN
  • USERDOMAIN_ROAMINGPROFILE
  • USERNAME
  • USERPROFILE

Umgebungsvariablen in der Registrierung

Umgebungsvariablen werden an zwei Stellen in der Registrierung gespeichert, einmal für den Benutzerbereich und einmal für den Maschinenbereich.

Verwenden Sie die Registrierung nicht zur Verwaltung von Umgebungsvariablen

Es gibt einen Haken, wenn Sie Änderungen an Variablen in der Registrierung vornehmen. Laufende Prozesse sehen keine Variablenänderungen in der Registrierung. Prozesse sehen nur die Registrierungsvariablen und -werte, die zum Zeitpunkt des Prozessstarts vorhanden waren, es sei denn, Windows benachrichtigt sie über eine Änderung.

Anstatt die Registrierung direkt zu bearbeiten, können Sie stattdessen eine .NET-Klasse verwenden. Die .NET-Klasse [System.Environment] kann maschinen- und benutzerspezifische Umgebungsvariablen ändern und die Registrierungspflege für Sie übernehmen.

Die direkte Bearbeitung von Umgebungsvariablen in der Registrierung ergibt keinen Sinn. Die .NET-Klasse bietet einen einfacheren, von Microsoft unterstützten Ansatz. Sie werden später in diesem Artikel erfahren, wie Sie die .NET-Klasse [System.Environment] verwenden können.

Umgebungsvariablen-Registrierungsorte und Abfragen

I hope you’ve been convinced to not modify the registry directly but if you’d like to take a peek at what’s in there, you can find all user environment variables in the HKEY_CURRENT_USER\Environment key. Machine-scoped environment variables are stored at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

In einem dieser Schlüssel befinden sich Registrierungswerte vom Typ REG_SZ oder REG_EXPAND_SZ. REG_EXPAND_SZ-Werte enthalten Umgebungsvariablen, die als Teil ihres Werts eingebettet sind. Diese Umgebungsvariablen werden beim Abrufen des Werts erweitert.

Um dies zu demonstrieren, verwenden Sie das Dienstprogramm REG. Dies ist ein kleines Befehlszeilen-Dienstprogramm, das mit Windows geliefert wird.

Fragen Sie die Umgebungsvariable TEMP wie unten gezeigt ab. Führen Sie REG mit dem Parameter QUERY aus, um den Wert der Variablen TEMP abzurufen.

> REG QUERY HKCU\Environment /V TEMP

HKEY_CURRENT_USER\Environment     
    TEMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp

Manchmal werden Umgebungsvariablen von Prozentzeichen umgeben angezeigt (%COMPUTERNAME%), wie oben gezeigt. Dies ist die alte Methode, um Umgebungsvariablen über cmd.exe und Batch-Dateien anzuzeigen. Beachten Sie, dass PowerShell dieses Format nicht erkennt.

Das Dienstprogramm REG ermöglicht es uns, den nativen Wert des Registrierungswerts zu sehen. Der Werttyp ist REG_EXPAND_SZ und der Wert enthält die Umgebungsvariable %USERPROFILE%.

Wenn Sie PowerShell verwenden möchten, um den Registrierungswert abzurufen, können Sie dies mit dem Get-Item-Befehl wie unten gezeigt tun.

PS51> Get-ItemProperty -Path HKCU:\Environment -Name TEMP

TEMP         : C:\Users\<your username>\AppData\Local\Temp
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Environment
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
PSChildName  : Environment
PSDrive      : HKCU
PSProvider   : Microsoft.PowerShell.Core\Registry

Anzeigen und Festlegen von Windows-Umgebungsvariablen über die GUI

Um eine GUI-Ansicht der Benutzer- und Systemumgebungsvariablen anzuzeigen, führen Sie SystemPropertiesAdvanced.exe von PowerShell, einer Eingabeaufforderung oder über die Tastenkombination Windows-Taste+R aus, um den Erweiterte Systemeigenschaften-Tab anzuzeigen. Klicken Sie auf die Schaltfläche Umgebungsvariablen, die im folgenden Bild hervorgehoben ist.

The System Properties dialog, Advanced tab

Der Dialog „Umgebungsvariablen“, wie unten dargestellt, ermöglicht es Ihnen, Benutzer- und maschinenbezogene Umgebungsvariablen anzuzeigen, zu erstellen und zu ändern. Beachten Sie, dass der Dialog maschinenbezogene Variablen als Systemvariablen bezeichnet.

The Environment Variables dialog

Jetzt, da Sie ein Verständnis für Umgebungsvariablen haben, kommen wir zu dem, wofür Sie hier sind, der Verwaltung mit PowerShell!

Es gibt verschiedene Möglichkeiten, wie Sie mit Umgebungsvariablen in PowerShell interagieren können.

  • Der Env: PSDrive und Provider – Sitzungsbasiert. Legt nur die Werte der Umgebungsvariablen für die aktuelle PowerShell-Sitzung fest
  • $env: Variablen – Sitzungsbasiert. Legt nur die Werte der Umgebungsvariablen für die aktuelle PowerShell-Sitzung fest
  • Die [System.Environment] .NET-Klasse – ermöglicht das Speichern von benutzer- und systemweiten Umgebungsvariablen über Sitzungen und Neustarts hinweg

Der Env: PSDrive und Provider

Einer der besten Wege, um Umgebungsvariablen zu lesen, ist ein PowerShell-Konzept, das als PowerShell-Drives (PS-Drives) bekannt ist. Ein PS-Drive ermöglicht es Ihnen, Umgebungsvariablen so zu behandeln, als wären sie ein Dateisystem über das Laufwerk Env:.

Wechseln zum Env: Drive

Wie bei allen PS-Drives verweisen Sie darauf über Pfade wie Env:\TEMP, Env:\COMPUTERNAME, usw. Aber um Tastenanschläge zu sparen, wechseln Sie zum Laufwerk Env:, wie Sie es bei jedem Dateisystemlaufwerk tun würden, wie unten gezeigt.

PS51> cd Env:
PS51 Env:\>

## oder

PS51> Set-Location Env:
PS Env:\>

Tab-Vervollständigung mit dem Env: Drive

Sie können dieselben Befehle verwenden, die Sie verwenden würden, um auf ein Dateisystem zuzugreifen, wie z. B. Get-Item und Get-ChildItem, um auf Umgebungsvariablen zuzugreifen. Aber anstelle des Dateisystems lesen Sie das Env:-Laufwerk.

Da Umgebungsvariablen in einem PS-Laufwerk gespeichert sind, können Sie die Funktion zur automatischen Vervollständigung von PowerShell verwenden, um die verfügbaren Variablen durchzugehen, wie unten gezeigt.

Env: tab completion – finding environment variables starting with the letter C

Lassen Sie uns nun ein paar Beispiele dafür sehen, wie Sie das Env:-Laufwerk verwenden können, um mit Umgebungsvariablen zu arbeiten.

Auflisten von Umgebungsvariablen mit Env:

PS51> Get-Item -Path Env:
PS51> Get-Item -Path Env:USERNAME

Auflisten von Umgebungsvariablen mit Wildcards mit Env:

PS51> Get-Item -Path Env:user*

Auffinden von Umgebungsvariablenwerten mit Env:

Die Ergebnisse dieser Befehle sind Schlüssel/Wert-Objekte des .NET-Typs [System.Collections.DictionaryEntry]. Diese Objekte enthalten den Namen der Umgebungsvariable in der Eigenschaft Name und den Wert in der Eigenschaft Value.

Sie können auf einen bestimmten Wert einer Umgebungsvariable zugreifen, indem Sie den Verweis auf den Get-Item-Befehl in Klammern setzen und auf die Eigenschaft Value verweisen, wie unten gezeigt:

PS51> (Get-Item -Path Env:computername).Value
MYCOMPUTERHOSTNAME

In Situationen, in denen Sie nur bestimmte Umgebungsvariablen zurückgeben müssen, verwenden Sie standardmäßige PowerShell-Cmdlets wie Select-Object und Where-Object, um die von dem Env:-Provider zurückgegebenen Objekte auszuwählen und zu filtern.

Im folgenden Beispiel wird nur die Umgebungsvariable COMPUTERNAME zurückgegeben.

PS51> Get-ChildItem -Path Env: | Where-Object -Property Name -eq 'COMPUTERNAME'

Alternativ können Sie das Cmdlet Get-Content verwenden. Dieses Cmdlet gibt ein [String]-Objekt zurück, das den Wert der Umgebungsvariable enthält. Dieses Objekt ist einfacher zu handhaben, da es nur den Wert zurückgibt und nicht ein Objekt mit den Eigenschaften Name und Value.

PS51> Get-Content -Path Env:\COMPUTERNAME

Demo: Einfügen von Umgebungswerten in einen String

Mit Get-Content können Sie den Wert einer Umgebungsvariable finden und beispielsweise die Umgebungsvariable COMPUTERNAME in einen Textstring einfügen.

PS51> 'Computer Name is: {0}' -f (Get-Content -Path Env:COMPUTERNAME)
Computer Name is: MYCOMPUTER

Setzen einer Umgebungsvariable (und Erstellen) mit Env:

Erstellen Sie neue Umgebungsvariablen mit PowerShell mithilfe des Cmdlets New-Item. Geben Sie den Namen der Umgebungsvariable in der Form Env:\<EnvVarName> für den Wert Name und den Wert der Umgebungsvariable für den Parameter Value an, wie im folgenden Beispiel gezeigt.

PS51> New-Item -Path Env:\MYCOMPUTER -Value MY-WIN10-PC
Name                           Value
----                           -----
MYCOMPUTER                     MY-WIN10-PC

Verwenden Sie das Set-Item-Cmdlet, um eine Umgebungsvariable festzulegen oder eine neue zu erstellen, falls sie noch nicht vorhanden ist. Sie können unten sehen, dass Sie mit dem Set-Item-Cmdlet sowohl eine Umgebungsvariable erstellen oder ändern können.

PS51> Set-Item -Path Env:testvariable -Value "Alpha"

Kopieren einer Umgebungsvariable mit Env:

Manchmal ergibt sich die Situation, dass Sie den Wert einer Umgebungsvariable replizieren müssen. Sie können dies mit dem Copy-Item-Cmdlet tun.

Unten können Sie sehen, dass der Wert der Variablen COMPUTERNAME in MYCOMPUTER kopiert wird und dabei den vorhandenen Wert überschreibt.

PS51> Get-Item -Path Env:\MYCOMPUTER

Name                           Value
----                           -----
MYCOMPUTER                     MY-WIN10-PC

PS51> Copy-Item -Path Env:\COMPUTERNAME -Destination Env:\MYCOMPUTER
PS51> Get-Item -Path Env:\MYCOMPUTER

Name                           Value
----                           -----
MYCOMPUTER                     WIN10-1903

Entfernen einer Umgebungsvariable mit Env:

Es wird Situationen geben, in denen eine Umgebungsvariable nicht mehr benötigt wird. Sie können Umgebungsvariablen mit einer der folgenden Methoden entfernen:

  • Verwenden Sie das Set-Item-Cmdlet, um einer Umgebungsvariable einen leeren Wert zuzuweisen
PS51> Set-Item -Path Env:\MYCOMPUTER -Value ''
PS51> Remove-Item -Path Env:\MYCOMPUTER
  • Verwenden Sie das Clear-Item-Cmdlet.
PS51> Clear-Item -Path Env:\MYCOMPUTER

Umbenennen einer Umgebungsvariable mit Env:

In Situationen, in denen der Name einer Umgebungsvariable geändert werden muss, haben Sie die Möglichkeit, diese mit dem Env:-Anbieter umzubenennen, anstatt sie zu löschen und neu zu erstellen.

Verwenden Sie das Rename-Item-Cmdlet, um den Namen einer Umgebungsvariablen zu ändern, während ihr Wert beibehalten wird. Unten sehen Sie, dass die Variable MYCOMPUTER in OLDCOMPUTER umbenannt wird, während ihr Wert erhalten bleibt.

PS51> Rename-Item -Path Env:\MYCOMPUTER -NewName OLDCOMPUTER
PS51> Get-Item -Path OLDCOMPUTER
Name                           Value
----                           -----
OLDCOMPUTER                    WIN10-1903

$Env: Variablen

Nachdem Sie das Env:-Laufwerk beherrschen, um Umgebungsvariablen wie Dateien zu behandeln, zeigt Ihnen dieser Abschnitt, wie Sie sie als Variablen behandeln können. Eine weitere Möglichkeit, Sitzungs-Umgebungsvariablen zu verwalten, ist die Verwendung des Powershell-Ausdruck-Analysators. Mit dieser Funktion können Sie auf Umgebungsvariablen über den $Env:-Bereich zugreifen.

Abrufen einer Umgebungsvariable mit $Env:

Mit dem $Env-Bereich können Sie direkt auf Umgebungsvariablen verweisen, ohne ein Kommando wie Get-Item zu verwenden, wie unten gezeigt.

PS51> $env:computername

Mit dieser Methode können Sie Umgebungsvariablen einfach in Zeichenketten einfügen, wie unten gezeigt.

PS51> "The Computer Name is {0}" -f $env:computername
The Computer Name is WIN10-1809
PS51> "The Computer Name is $env:computername"
The Computer Name is WIN10-1809

Setzen oder Erstellen einer Umgebungsvariable mit $Env:

Das Setzen einer Umgebungsvariable mit dieser Methode ist unkompliziert. Dadurch wird auch eine neue Umgebungsvariable erstellt, wenn sie noch nicht vorhanden ist, wie unten gezeigt.

PS51> $env:testvariable = "Alpha"

Verwenden Sie die +=-Syntax, um einen bestehenden Wert zu erweitern, anstatt ihn zu überschreiben.

PS51> $env:testvariable = "Alpha"
PS51> $env:testvariable += ",Beta"

PS51> $env:testvariable
Alpha,Beta

Entfernen einer Umgebungsvariable mit $Env:

Um eine Umgebungsvariable mit dieser Methode zu entfernen, setzen Sie einfach ihren Wert auf eine leere Zeichenkette.

PS51> $env:testvariable = ''

Verwendung der [System.Environment] .NET Klasse

Die .NET Klasse [System.Environment] bietet Methoden zum Abrufen und Setzen von Umgebungsvariablen. Dies ist die einzige Methode, um auf verschiedene Umgebungsbereiche direkt zuzugreifen und Umgebungsvariablen zu setzen, die über PowerShell-Sitzungen hinweg bestehen bleiben.

In allen folgenden Beispielen wird, wenn kein Bereich angegeben ist, vom Prozessbereich ausgegangen.

Bei der Verwendung von [System.Environment] verwenden Sie einige verschiedene Methoden der .NET statischen Klasse. Sie müssen nicht verstehen, was eine statische Methode ist. Sie müssen nur verstehen, dass Sie für die Verwendung einer der Techniken, die Sie gleich lernen werden, zuerst die Klasse ([System.Environment]) referenzieren müssen, gefolgt von zwei Doppelpunkten (::), dann gefolgt von der Methode.

Auflistung von Umgebungsvariablen mit [System.Environment]

Wenn Sie alle Umgebungsvariablen in einem bestimmten Bereich sehen möchten, verwenden Sie die Methode GetEnvironmentVariables. Diese Methode gibt alle Umgebungsvariablen zurück, die als Methode Argument (in Klammern) spezifiziert sind.

Listing environment variables with GetEnvironmentVariable in each scope
PS51> [System.Environment]::GetEnvironmentVariables('User') PS51> [System.Environment]::GetEnvironmentVariables('Machine') PS51> [System.Environment]::GetEnvironmentVariables('Process') # Das gleiche wie Prozess PS51> [System.Environment]::GetEnvironmentVariables()

Einzelne Umgebungsvariablen mit [System.Environment] abrufen

Wenn Sie eine bestimmte Umgebungsvariable finden müssen, können Sie dies auf zwei verschiedene Arten tun.

  • GetEnvironmentVariables().<var name> – nicht empfohlen
  • GetEnvironmentVariable('<var name>','<scope>')

GetEnvironmentVariables()

Mit der Methode GetEnvironmentVariables() verwenden Sie die Punktnotation, um auf den Wert zuzugreifen. Schließen Sie die Referenz auf die Klasse und die statische Methode [System.Environment] in Klammern ein, gefolgt von einem Punkt und dem Namen der Umgebungsvariable, wie unten gezeigt:

PS51> ([System.Environment]::GetEnvironmentVariables()).APPDATA

Beachten Sie, dass Sie bei der Verwendung dieser Methode sicherstellen müssen, dass Sie die Groß- und Kleinschreibung beachten! Versuchen Sie im obigen Beispiel, die Variable APPDATA mit appdata zu referenzieren. Verwenden Sie stattdessen die Methode GetEnvironmentVariable().

GetEnvironmentVariable()

Verwenden Sie anstelle der Methode GetEnvironmentVariables() die Methode GetEnvironmentVariable(), um einzelne Umgebungsvariablen zu finden. Diese Methode umgeht das Problem mit der Groß- und Kleinschreibung und ermöglicht es Ihnen auch, den Geltungsbereich anzugeben.

Verwenden Sie für diese Methode den Namen der Umgebungsvariable und den gewünschten Geltungsbereich, die durch ein Komma getrennt sind.

PS51> [System.Environment]::GetEnvironmentVariable('ComputerName','User')
# Leer

PS51> [System.Environment]::GetEnvironmentVariable('ComputerName','Machine')
# Leer

PS51> [System.Environment]::GetEnvironmentVariable('ComputerName','Process')  WIN10-1903

# Gleich wie Prozess
PS51> [System.Environment]::GetEnvironmentVariable('ComputerName')
WIN10-1903

Setzen einer Umgebungsvariable mit [System.Environment]

Verwenden Sie die Methode SetEnvironmentVariable(), um den Wert einer Umgebungsvariable für den angegebenen Geltungsbereich festzulegen oder eine neue zu erstellen, falls sie noch nicht existiert.

Beim Setzen von Variablen im Prozessbereich wirst du feststellen, dass der Prozessbereich volatil ist, während Änderungen an den Benutzer- und Maschinenbereichen permanent sind.

PS51> [System.Environment]::SetEnvironmentVariable('TestVariable','Alpha','User')

PS51> [System.Environment]::SetEnvironmentVariable('TestVariable','Alpha','Process')

PS51> [System.Environment]::SetEnvironmentVariable('TestVariable','Alpha','Machine')

 # Das Gleiche wie Prozess
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable','Alpha')

Hinweis: Das Aufrufen der Methode SetEnvironmentVariable mit einem Variablennamen oder Wert von 32767 Zeichen oder mehr führt dazu, dass eine Ausnahme geworfen wird.

Entfernen einer Umgebungsvariable mit [System.Environment]

Verwende die Methode SetEnvironmentVariable(), um eine Umgebungsvariable für den angegebenen Bereich zu entfernen, indem du ihren Wert auf einen leeren String setzt.

PS51> [System.Environment]::SetEnvironmentVariable('TestVariable', '', 'User')

PS51> [System.Environment]::SetEnvironmentVariable('TestVariable', '', 'Process')

PS51> [System.Environment]::SetEnvironmentVariable('TestVariable', '', 'Machine')

# Das Gleiche wie Prozess
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable', '')

Nützliche PowerShell-Umgebungsvariablen

Wie viele andere Windows-Anwendungen hat PowerShell einige eigene Umgebungsvariablen. Zwei nützliche Umgebungsvariablen sind PSExecutionPolicyPreference und PSModulePath.

PSExecutionPolicyPreference

Die Umgebungsvariable PSExecutionPolicyPreference speichert die aktuelle PowerShell-Ausführungsrichtlinie. Sie wird erstellt, wenn eine sitzungsspezifische PowerShell-Ausführungsrichtlinie festgelegt wird durch:

  • Ausführen des Cmdlets Set-ExecutionPolicy mit einem Scope-Parameter von Process
  • Ausführen der ausführbaren Datei powershell.exe, um eine neue Sitzung zu starten, wobei der Befehlszeilenparameter ExecutionPolicy verwendet wird, um eine Richtlinie für die Sitzung festzulegen.

PSModulePath

Die Umgebungsvariable PSModulePath enthält den Pfad, den PowerShell nach Modulen durchsucht, wenn kein vollständiger Pfad angegeben ist. Sie ist ähnlich aufgebaut wie die Standard-Umgebungsvariable PATH, mit einzelnen Verzeichnispfaden, die durch ein Semikolon getrennt sind.

PS51> $env:PSModulePath
C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

Quick-Tipp: Trennen Sie jeden Ordner, um ein Zeichenarray zu erhalten, um jeden Pfad einzeln mit $env:PSModulePath.split(‘;’) zu verarbeiten.

Zusammenfassung

Umgebungsvariablen sind eine nützliche Methode, um Informationen über ein laufendes System zu erhalten oder Informationen über Sitzungen und Neustarts hinweg zu speichern. Egal, ob Sie die standardmäßigen Windows-Betriebssystemumgebungsvariablen lesen oder Ihre eigenen erstellen, Sie können sie jetzt mit PowerShell auf verschiedene Arten verwalten!

Weitere Informationen

Source:
https://adamtheautomator.com/powershell-environment-variables/