답변:
그냥 가져다 롭의 코멘트를 빛 :
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
refreshenv
작동하지 않았다. 여기의 대답 ( 'Robs Comment')은 트릭을 훌륭하게 수행했습니다. 따라서 어떤 접근법은 효과가 있고 다른 접근법은 효과가없는 상황이있을 수 있습니다.
refreshenv
작동하지 않습니다. refreshenv
subseqent 쉘에서만 작품을 열었다.
머신 경로를 가져 와서 세션 경로에 지정하십시오.
$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
refreshenv
나를 위해 작동하지 않았습니다 (Windows 10). 여전히 적용하려면 새 창을 열어야했습니다.
refreshenv
또한 여기서 일하지 않습니다. Windows Sandbox 환경에서 일부 스크립트 작업을 수행하면 새 PS 세션이 시작되지 않으면 경로가 업데이트되지 않습니다.
경로에 세션 시작시 정의되지 않은 환경 변수가 포함 된 경우 해당 변수도 확장해야합니다.
$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