PowerShell에서 경로 다시로드


145

PowerShell ISE 인스턴스가 실행 중이고 PATH를 수정하는 무언가를 설치하거나 PowerShell 외부에서 어떤 식 으로든 수정 한 경우 업데이트 된 PATH 변수를 보려면 PowerShell을 다시 시작해야합니다.

PowerShell을 다시 시작하지 않고 경로를 다시로드하는 방법이 있습니까?

답변:


207

그냥 가져다 롭의 코멘트를 빛 :

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

3
예. Rob의 의견 은 실제로 Powershell Casbah를 뒤흔들 었습니다.
세실 커리

24
chocolatey를 사용하고 있으며 프로필에로드 된 경우 더 간단한 명령이 refreshenv있습니다. 이것은 기본적으로 더 정교한 rob의 주석 버전 을 실행합니다 .
kumarharsh

Powershell 멍청한 이래로 내가해야 할 일을 알아 내려고 많은 시간을 보냈습니다. 미친 듯이 길을 바꾸고 있었고 이것은 내가 필요한 것입니다. +1
cr1pto

fwiw, 나는 초콜릿을 사용하고 있지만 refreshenv작동하지 않았다. 여기의 대답 ( 'Robs Comment')은 트릭을 훌륭하게 수행했습니다. 따라서 어떤 접근법은 효과가 있고 다른 접근법은 효과가없는 상황이있을 수 있습니다.
3z33etm

3
PATH 변수를 수정하는 동일한 스크립트에서 chocolatey를 통해 chocolatey 자체 및 기타 앱을 설치하는 경우 refreshenv작동하지 않습니다. refreshenvsubseqent 쉘에서만 작품을 열었다.
Frank Fu

72

머신 경로를 가져 와서 세션 경로에 지정하십시오.

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

53
고마워요! 또한 path라는 사용자 환경 변수가 있으므로 다음을 수행해야합니다. [System.Environment] :: GetEnvironmentVariable ( "Path", "Machine") + ";" + [System.Environment] :: GetEnvironmentVariable ( "Path", "User")
rob

24

가장 쉬운 방법은 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

8
refreshenv나를 위해 작동하지 않았습니다 (Windows 10). 여전히 적용하려면 새 창을 열어야했습니다.
Peter Mortensen

1
Windows 10에서 정확하게 테스트하고 사용했는데 매우 유용합니다. 내가 만든 사용법 예제는 준비되지 않았으며 콘솔에서 인쇄되었습니다. 아마도 귀하의 경우에는 사용자와 시스템 변수 사이에 충돌이 있습니까? 또한 알다시피 Conemu와 같은 다중 콘솔 환경에서는 현재 콘솔에만 영향을 미칩니다.
Arkadiusz Przechodzki

refreshenv또한 여기서 일하지 않습니다. Windows Sandbox 환경에서 일부 스크립트 작업을 수행하면 새 PS 세션이 시작되지 않으면 경로가 업데이트되지 않습니다.
Reece Mercer

6

를 기반으로 mpen의 대답은 , 여기 PowerShell은 기능은 다음과 같습니다

function refresh-path {
    $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") +
                ";" +
                [System.Environment]::GetEnvironmentVariable("Path","User")
}

그런 다음 전화하십시오 refresh-path.


3

경로에 세션 시작시 정의되지 않은 환경 변수가 포함 된 경우 해당 변수도 확장해야합니다.

$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"))

나는 문제 개방 에이 솔루션을 추가 할 수 refreshenvChocolatey에서합니다.


3

다른 답변에 추가하기 위해 사용자에게 빈 경로가있는 경우 필터링하여 불필요한 조인을 추가하지 않도록 할 수 있습니다.

$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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.