932 Stimmen

Festlegen von Windows PowerShell-Umgebungsvariablen

Ich habe herausgefunden, dass das Setzen der Umgebungsvariablen PATH nur die alte Eingabeaufforderung beeinflusst. PowerShell scheint andere Umgebungseinstellungen zu haben. Wie kann ich die Umgebungsvariablen für PowerShell (v1) ändern?

Anmerkung:

Ich möchte meine Änderungen dauerhaft machen, damit ich sie nicht jedes Mal, wenn ich PowerShell ausführe, neu einstellen muss. Verfügt PowerShell über eine Profildatei? So etwas wie ein Bash-Profil unter Unix?

1 Stimmen

Ich würde gerne ein zentrales Profil auf einer Dateifreigabe haben. Die Synchronisierung ist mühsam. Das Erstellen eines Stub-Profils mit . \\computer\share\path\Profile.ps1 erscheint wie ein Kunstgriff (versuchen Sie Notepad $Profile). Es wäre schön, wenn es eine Möglichkeit gäbe, die automatische Variable $Profile dauerhaft zu ändern.

5 Stimmen

Nein die PATH-Umgebung tut auch die Powershell-Eingabeaufforderung beeinflussen. Der Unterschied besteht jedoch darin, dass powershell keine in Anführungszeichen eingeschlossenen Pfade akzeptiert. Lösung: Entfernen Sie alle eingeschlossenen Anführungszeichen ( " ) in der Umgebungsvariablen path

4 Stimmen

WENN SIE HIER LANDEN FÜR PS > v1... Im Anschluss an Nilzors Kommentar oben: Verwenden Sie dies, um alle " aus den Pfaden in der Umgebungsvariablen PATH für Ihre Sitzung zu entfernen: $($Env:PATH).Split(';') | %{ $str += "$($_.Trim('"'));" }; $Env:PATH=$str

5voto

Mac Punkte 299

Um das klarzustellen: Die Windows-Methode der 1990er Jahre, auf Start klicken Sie mit der rechten Maustaste auf Dieser PC und wählen Sie Eigenschaften und wählen Sie dann Erweiterte Systemeinstellungen und wählen Sie dann in dem sich öffnenden Dialogfeld Umgebungsvariablen und in der Liste einen Doppelklick auf PATH und dann unter Verwendung der Neu , Editar , Aufsteigen y Nach unten bewegen alle funktionieren noch, um den PATH zu ändern. Die Power-Shell und der Rest von Windows erhalten das, was Sie hier einstellen.

Ja, Sie können diese neuen Methoden anwenden, aber die alte Methode funktioniert immer noch. Und im Grunde genommen sind alle Methoden zur dauerhaften Änderung kontrollierte Methoden zur Bearbeitung Ihrer Registrierungsdateien.

3voto

Jobin James Punkte 778

Öffnen Sie PowerShell und führen Sie es aus:

[Environment]::SetEnvironmentVariable("PATH", "$ENV:PATH;<path to exe>", "USER")

1voto

Somnium Punkte 968

Wenn Sie den Variablennamen dynamisch und nur für die Sitzung festlegen müssen, dann verwenden Sie:

New-Item env:\$key -Value $value -Force | Out-Null

0voto

Eniola Punkte 710

Ich habe versucht, zu optimieren SBF's y Michael's Code etwas zu kompakt zu gestalten.

Ich verlasse mich auf die PowerShell-Typ-Coercion, bei der Zeichenketten automatisch in Enum-Werte konvertiert werden, daher habe ich das Nachschlagewörterbuch nicht definiert.

Ich habe auch den Block herausgenommen, der den neuen Pfad auf der Grundlage einer Bedingung zur Liste hinzufügt, so dass die Arbeit einmal erledigt und in einer Variablen zur Wiederverwendung gespeichert ist.

Es wird dann dauerhaft oder nur auf die Sitzung angewendet, je nach $PathContainer Parameter.

Wir können den Codeblock in eine Funktion oder eine ps1-Datei einfügen, die wir direkt von der Befehlszeile aus aufrufen. Ich habe mich für DevEnvAddPath.ps1 entschieden.

param(
    [Parameter(Position=0,Mandatory=$true)][String]$PathChange,

    [ValidateSet('Machine', 'User', 'Session')]
    [Parameter(Position=1,Mandatory=$false)][String]$PathContainer='Session',
    [Parameter(Position=2,Mandatory=$false)][Boolean]$PathPrepend=$false
)

[String]$ConstructedEnvPath = switch ($PathContainer) { "Session"{${env:Path};} default{[Environment]::GetEnvironmentVariable('Path', $containerType);} };
$PathPersisted = $ConstructedEnvPath -split ';';

if ($PathPersisted -notcontains $PathChange) {
    $PathPersisted = $(switch ($PathPrepend) { $true{,$PathChange + $PathPersisted;} default{$PathPersisted + $PathChange;} }) | Where-Object { $_ };

    $ConstructedEnvPath = $PathPersisted -join ";";
}

if ($PathContainer -ne 'Session') 
{
    # Save permanently to Machine, User
    [Environment]::SetEnvironmentVariable("Path", $ConstructedEnvPath, $PathContainer);
}

# Update the current session
${env:Path} = $ConstructedEnvPath;

Ich mache etwas Ähnliches für eine DevEnvRemovePath.ps1.

param(
    [Parameter(Position=0,Mandatory=$true)][String]$PathChange,

    [ValidateSet('Machine', 'User', 'Session')]
    [Parameter(Position=1,Mandatory=$false)][String]$PathContainer='Session'
)

[String]$ConstructedEnvPath = switch ($PathContainer) { "Session"{${env:Path};} default{[Environment]::GetEnvironmentVariable('Path', $containerType);} };
$PathPersisted = $ConstructedEnvPath -split ';';

if ($PathPersisted -contains $PathChange) {
    $PathPersisted = $PathPersisted | Where-Object { $_ -ne $PathChange };

    $ConstructedEnvPath = $PathPersisted -join ";";
}

if ($PathContainer -ne 'Session') 
{
    # Save permanently to Machine, User
    [Environment]::SetEnvironmentVariable("Path", $ConstructedEnvPath, $PathContainer);
}

# Update the current session
${env:Path} = $ConstructedEnvPath;

Bislang scheinen sie zu funktionieren.

0voto

MrMesees Punkte 1318

Viele Beispiele für das Anhängen oder Überschreiben. Hier ist ein Beispiel für das Voranstellen eines Pfades auf powershell für Linux, Ubuntu 18.04 mit pwsh 7.1.3

$ENV:PATH = "/home/linuxbrew/.linuxbrew/bin:$ENV:PATH"

Ich füge speziell das linuxbrew (homebrew for linux) bin-Verzeichnis hinzu, damit es Vorrang vor dem installierten System hat. Es hat mir geholfen, ein Problem zu lösen, das ich hatte, und obwohl dies der hilfreichste Ort war, ließ es mich auch "experimentieren".

Beachten Sie, dass die : ist das Linux-Pfad-Trennzeichen, während Sie unter Windows (oder zumindest unter meinem Windows) das ; für Powershell typischerweise.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X