2013-07-22 1 views
72

Если у меня есть экземпляр Powershell ISE, и я устанавливаю что-то, что изменяет PATH, или я каким-либо образом изменяю его вне Powershell, тогда мне нужно перезапустить Powershell, чтобы он мог видеть обновленную переменную PATH.Перезагрузите путь в powershell

Есть ли способ перезагрузить путь изнутри Powershell без перезагрузки?

ответ

81

Просто принести Rob's comment к свету:

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

** Yup. ** [Комментарий Роба] (https://stackoverflow.com/questions/17794507/reload-the-path-in- powershell # comment25967553_17794885), скалы Powershell Casbah, действительно. –

+5

Должно быть проще ... – Dyin

+7

Если вы используете шоколадный продукт, и он загружен в ваш профиль, есть более простая команда: 'refreshenv'. Это в основном работает [более сложная версия] (https://github.com/chocolatey/choco/blob/stable/src/chocolatey.resources/helpers/functions/Update-SessionEnvironment.ps1) комментария rob. –

59

Попробуйте получить путь к машине и присвоить его пути к сеансу.

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

Спасибо, что сработало! У меня также была переменная среды пользователя с именем path, поэтому мне пришлось это сделать: [System.Environment] :: GetEnvironmentVariable («Путь», «Машина») + «;» + [System.Environment] :: GetEnvironmentVariable («Путь», «Пользователь») – rob

0

Если путь содержит переменные окружения, которые не были определены в начале сессии, вы хотите, чтобы расширить их тоже

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

Для меня это было полезно после установки NVM, которое определяет и добавляет% NVM_HOME% к пути

Чтобы принять это к своему логическому завершению, вы можете использовать эту рекурсивную функцию для расширения вместо

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

, а затем использовать

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

Я opened an issue, чтобы добавить этот раствор в refreshenv с шоколадным