2013-07-22 12 views
72

Jeśli mam uruchomioną instancję Powershell ISE i zainstaluję coś, co modyfikuje zmienną PATH lub modyfikuję ją w dowolny sposób poza Powershell, potrzebuję zrestartować Powershell, aby zobaczyć zaktualizowaną zmienną PATH.Przeładuj ścieżkę w powłoce Power Shell

Czy istnieje sposób na ponowne załadowanie ścieżki z poziomu Powershell bez ponownego uruchamiania?

Odpowiedz

81

Wystarczy przynieść Rob's comment do światła:

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

** Yup. ** [Komentarz Rob'a] (https://stackoverflow.com/questions/17794507/reload-the-path-in- powershell # comment25967553_17794885), w rzeczy samej kołysze Powershell Casbah. –

+5

Powinno być łatwiejsze ... – Dyin

+7

Jeśli używasz chocolatey i jest on załadowany do twojego profilu, jest prostsze polecenie: 'refreshenv'. Zasadniczo działa to w wersji [bardziej rozbudowanej] (https://github.com/chocolatey/choco/blob/stable/src/chocolatey.resources/helpers/functions/Update-SessionEnvironment.ps1) komentarza rob. –

59

Spróbuj uzyskać ścieżkę maszyny i przypisać ją do ścieżki sesji.

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

Dzięki, że zadziałało! Miałem również zmienną środowiska użytkownika o nazwie path, więc musiałem to zrobić: [System.Environment] :: GetEnvironmentVariable ("Path", "Machine") + ";" + [System.Environment] :: GetEnvironmentVariable ("Path", "User") – rob

0

Jeśli ścieżka zawiera zmienne środowiskowe, które nie zostały zdefiniowane na początku sesji, będziemy chcieli, aby rozwinąć te zbyt

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

Dla mnie było to przydatne po zainstalowaniu NVM, który definiuje i dodaje% NVM_HOME% do ścieżki

Aby wziąć to do logicznego wniosku, można użyć tej funkcji rekurencyjnej rozszerzyć zamiast

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

a następnie użyć

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

ja już opened an issue dodać ten roztwór do refreshenv od chocolatey

Powiązane problemy