PowerShell ISE 인스턴스가 실행 중이고 PATH를 수정하는 무언가를 설치하거나 PowerShell 외부에서 어떤 식 으로든 수정 한 경우 업데이트 된 PATH 변수를 보려면 PowerShell을 다시 시작해야합니다.
PowerShell을 다시 시작하지 않고 경로를 다시로드하는 방법이 있습니까?
답변
그냥 가져다 롭의 코멘트를 빛 :
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
답변
머신 경로를 가져 와서 세션 경로에 지정하십시오.
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
답변
가장 쉬운 방법은 Chocolatey (프리웨어)를 사용하십시오. CMD와 PowerShell 모두에서 작동합니다. 그런 다음 간단한 명령으로 PATH (변수 확장 포함)를 다시로드 할 수 있습니다.
refreshenv
cmd에서 설치 (관리자 권한 필요) :
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
사용법 예 :
> SET JAVA_HOME=c:/java/jdk6
> SET PATH=%JAVA_HOME%/bin
> ECHO %PATH%
c:/java/jdk6/bin
> SET JAVA_HOME=c:/java/jdk8
> refreshenv
Refreshing environment variables from registry for cmd.exe. Please wait...Finished..
> echo %PATH%
c:/java/jdk8/bin
답변
를 기반으로 mpen의 대답은 , 여기 PowerShell은 기능은 다음과 같습니다
function refresh-path {
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") +
";" +
[System.Environment]::GetEnvironmentVariable("Path","User")
}
그런 다음 전화하십시오 refresh-path
.
답변
경로에 세션 시작시 정의되지 않은 환경 변수가 포함 된 경우 해당 변수도 확장해야합니다.
$env:Path = [System.Environment]::ExpandEnvironmentVariables([System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User"))
나에게 이것은 경로에 % NVM_HOME %을 정의하고 추가하는 NVM을 설치 한 후에 유용했습니다.
이것을 논리적 결론으로 가져 오기 위해이 재귀 함수를 사용하여 대신 확장 할 수 있습니다.
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"))
나는 문제 개방 에이 솔루션을 추가 할 수 refreshenv
Chocolatey에서합니다.
답변
다른 답변에 추가하기 위해 사용자에게 빈 경로가있는 경우 필터링하여 불필요한 조인을 추가하지 않도록 할 수 있습니다.
$env:Path=(
[System.Environment]::GetEnvironmentVariable("Path","Machine"),
[System.Environment]::GetEnvironmentVariable("Path","User")
) -match '.' -join ';'
또는 더 유용하게는 다른 환경 변수 또는 여러 환경 변수에 추가하는 스크립트를 실행하는 경우 함수를 사용하여 모두 재설정하십시오
function resetEnv {
Set-Item `
-Path (('Env:', $args[0]) -join '') `
-Value ((
[System.Environment]::GetEnvironmentVariable($args[0], "Machine"),
[System.Environment]::GetEnvironmentVariable($args[0], "User")
) -match '.' -join ';')
}
resetEnv Path
resetEnv AppPath