it-source

PowerShell에서 경로 다시 로드

criticalcode 2023. 5. 21. 11:37
반응형

PowerShell에서 경로 다시 로드

PowerShell ISE 인스턴스가 실행 중인데 PATH를 수정하는 것을 설치하거나 PowerShell 외부에서 수정하는 경우 PowerShell을 다시 시작해야 업데이트된 PATH 변수를 볼 수 있습니다.

다시 시작하지 않고 PowerShell 내에서 경로를 다시 로드할 수 있는 방법이 있습니까?

롭의 의견을 밝히기 위해서입니다.

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

컴퓨터 경로를 가져와서 세션 경로에 할당해 보십시오.

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

가장 쉬운 방법은 초콜릿을 사용하는 것입니다.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]::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

경로에 세션 시작 시 정의되지 않은 환경 변수가 포함되어 있는 경우 다음과 같이 확장할 수 있습니다.

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

이 솔루션을 추가할 문제를 열었습니다.refreshenvChocolaty 출신.

언급URL : https://stackoverflow.com/questions/17794507/reload-the-path-in-powershell

반응형