2013-07-22 11 views
72

Wenn ich eine Instanz von Powershell ISE ausgeführt habe und ich installiere etwas, das den PATH ändert oder ich modifiziere es in irgendeiner Weise außerhalb Powershell, dann muss ich Powershell neu starten, um die aktualisierte PATH-Variable zu sehen.Reload den Pfad in Powershell

Gibt es eine Möglichkeit, den Pfad von Powershell neu zu laden, ohne ihn neu zu starten?

Antwort

81

Nur Rob's comment ans Licht zu bringen:

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") 
+2

** Yup. ** [Robs Kommentar] (https://stackoverflow.com/questions/17794507/reload-the-path-in- Powershell # comment25967553_17794885) rockt tatsächlich die Powershell Casbah. –

+5

Sollte einfacher sein ... – Dyin

+7

Wenn Sie chocolatey verwenden und es in Ihr Profil geladen wird, gibt es einen einfacheren Befehl: 'refrehenv'. Dies führt im Grunde eine [ausführlichere Version] (https://github.com/chocolatey/choco/blob/stable/src/chocolatey.resources/helpers/functions/Update-SessionEnvironment.ps1) von Robs Kommentar. –

59

Versuchen Sie, den Maschinenpfad abzurufen und ihn dem Pfad der Sitzung zuzuweisen.

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") 
+30

hinzufügen Danke das hat funktioniert! Ich hatte auch eine Benutzerumgebungsvariable namens path, also musste ich dies tun: [System.Environment] :: GetEnvironmentVariable ("Path", "Machine") + ";" + [System.Environment] :: GetEnvironmentVariable ("Pfad", "Benutzer") – rob

0

Wenn Ihr Weg Umgebungsvariablen enthält, die nicht zu Beginn der Sitzung definiert wurden, werden Sie diese natürlich auch

erweitern möchten
$env:Path = [System.Environment]::ExpandEnvironmentVariables([System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")) 

Für mich war dies nützlich nach der Installation von NVM, die definiert und fügt% NVM_HOME% auf den Pfad

Um dies zu seinem logischen Schluss Sie diese rekursive Funktion stattdessen zu erweitern

function Expand-EnvironmentVariablesRecursively($unexpanded) { 
    $previous = '' 
    $expanded = $unexpanded 
    while($previous -ne $expanded) { 
     $previous = $expanded  
     $expanded = [System.Environment]::ExpandEnvironmentVariables($previous) 
    } 
    return $expanded 
} 

und dann

$env:Path = Expand-EnvironmentVariablesRecursively([System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")) 

ich diese Lösung in refreshenv von opened an issue chocolatey verwenden haben verwenden könnte