programing

윈도우즈 PowerShell 환경 변수 설정

padding 2023. 4. 8. 08:03
반응형

윈도우즈 PowerShell 환경 변수 설정

PATH 환경변수를 설정하면 이전 명령어프롬프트에만 영향을 준다는 것을 알게 되었습니다.PowerShell의 환경 설정이 다른 것 같습니다.PowerShell(v1) 환경변수를 변경하려면 어떻게 해야 합니까?

주의:

변경을 영구적으로 하고 싶기 때문에 PowerShell을 실행할 때마다 변경할 필요가 없습니다.PowerShell에 프로파일 파일이 있습니까?유닉스의 Bash 프로파일 같은 거?

PowerShell 세션 중에 PATH 환경 변수를 보거나 일시적으로 수정해야 하는 경우 다음 명령 중 하나를 입력할 수 있습니다.

$env:Path                             # shows the actual content
$env:Path = 'C:\foo;' + $env:Path     # attach to the beginning
$env:Path += ';C:\foo'                # attach to the end

변경은 '환경변수 변경'을 할 수 있습니다.env: namespace / drive 변수를 합니다.예를 들어, 이 코드는 경로 환경 변수를 업데이트합니다.

$env:Path = "SomeRandomPath";             (replaces existing path) 
$env:Path += ";SomeRandomPath"            (appends to existing path)

영속적인 변경

환경 설정을 영속적으로 하는 방법도 있지만 PowerShell에서만 사용하는 경우에는 Powershell 프로파일 스크립트를 사용하는 것이 좋습니다.

Powershell의 새 인스턴스가 시작될 때마다 특정 스크립트 파일(이름 있는 프로파일 파일)을 검색하여 해당 파일(있는 경우)을 실행합니다.이러한 프로파일 중 하나를 편집하여 환경을 커스터마이즈할 수 있습니다.

이러한 프로파일스크립트의 컴퓨터 타입의 위치를 확인하려면 , 다음의 순서에 따릅니다.

$profile                                     
$profile.AllUsersAllHosts           
$profile.AllUsersCurrentHost        
$profile.CurrentUserAllHosts    
$profile.CurrentUserCurrentHost     

예를 들어 다음과 같이 입력하여 이들 중 하나를 편집할 수 있습니다.

notepad $profile

또한 다음과 같이 사용자/시스템 환경 변수를 영구적으로 수정할 수 있습니다(즉, 셸 재시작 후에도 지속됩니다).

시스템 환경 변수 수정

[Environment]::SetEnvironmentVariable
     ("Path", $env:Path, [System.EnvironmentVariableTarget]::Machine)

사용자 환경 변수 수정

[Environment]::SetEnvironmentVariable
     ("INCLUDE", $env:INCLUDE, [System.EnvironmentVariableTarget]::User)

코멘트 사용 - 시스템 환경 변수에 추가

[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) + ";C:\bin",
    [EnvironmentVariableTarget]::Machine)

스트링 기반 솔루션은 유형을 쓰지 않는 경우에도 사용할 수 있습니다.

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\bin", "Machine")

하기 위해 을 수행합니다.$env:path >> a.outPowerShell power power power power power power 。

PowerShell 프롬프트에서 다음을 수행합니다.

setx PATH "$env:path;\the\directory\to\add" -m

그러면 다음 텍스트가 표시됩니다.

SUCCESS: Specified value was saved.

세션을 재시작하면 변수를 사용할 수 있습니다. setx임의 변수를 설정하는 데도 사용할 수 있습니다.「」라고 입력합니다.setx /?를 참조해 주세요.

JeanT의 대답처럼, 나는 길을 더하는 것에 대한 추상화를 원했다.JeanT의 답변과는 달리 사용자의 조작 없이 실행할 수 있어야 했습니다.기타 동작:

  • ★★$env:Path됩니다.
  • 향후 세션을 위해 환경 변수 변경 유지
  • 동일한 경로가 이미 존재하는 경우 중복 경로를 추가하지 않습니다.

도움이 되는 경우는, 다음과 같습니다.

function Add-EnvPath {
    param(
        [Parameter(Mandatory=$true)]
        [string] $Path,

        [ValidateSet('Machine', 'User', 'Session')]
        [string] $Container = 'Session'
    )

    if ($Container -ne 'Session') {
        $containerMapping = @{
            Machine = [EnvironmentVariableTarget]::Machine
            User = [EnvironmentVariableTarget]::User
        }
        $containerType = $containerMapping[$Container]

        $persistedPaths = [Environment]::GetEnvironmentVariable('Path', $containerType) -split ';'
        if ($persistedPaths -notcontains $Path) {
            $persistedPaths = $persistedPaths + $Path | where { $_ }
            [Environment]::SetEnvironmentVariable('Path', $persistedPaths -join ';', $containerType)
        }
    }

    $envPaths = $env:Path -split ';'
    if ($envPaths -notcontains $Path) {
        $envPaths = $envPaths + $Path | where { $_ }
        $env:Path = $envPaths -join ';'
    }
}

요지를 확인해 주세요.Remove-EnvPath★★★★★★ 。

번거로움이 없는 한 줄의 예시 솔루션

PowerShell에서 환경변수 설정 및 삭제를 연습하려면 다음 세 가지 명령을 사용합니다.

사용상의 주의:

  1. 상위 PowerShell(예: 관리자 권한)에서 이러한 명령을 실행합니다.
  2. 각 단계 후 명령을 작동하려면 세션을 닫았다가 다시 여십시오.

영구 환경 변수 추가/생성:

[Environment]::SetEnvironmentVariable("MyEnvVar", "NewEnvValue", "Machine")

Machine현재 사용자 및 미래 사용자에게 적용됩니다.User타겟을 설정합니다.


환경 변수 수정/변경:

[Environment]::SetEnvironmentVariable("MyEnvVar", "NewerEnvValue", "Machine")

변수 삭제/제거:

[Environment]::SetEnvironmentVariable("MyEnvVar", "", "Machine")

영속적인 변경을 시사하는 모든 답변에 같은 문제가 있습니다.경로 레지스트리 값이 끊어집니다.

SetEnvironmentVariable을 바꾸다REG_EXPAND_SZ 가 value%SystemRoot%\system32REG_SZ의 의 값C:\Windows\system32.

경로 내의 다른 변수도 모두 손실됩니다. %myNewPath%더 이상 작동하지 않습니다.

대본이 .Set-PathVariable.ps1이 문제에 대처하기 위해 사용하고 있습니다.

 [CmdletBinding(SupportsShouldProcess=$true)]
 param(
     [parameter(Mandatory=$true)]
     [string]$NewLocation)

 Begin
 {

 #requires –runasadministrator

     $regPath = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
     $hklm = [Microsoft.Win32.Registry]::LocalMachine

     Function GetOldPath()
     {
         $regKey = $hklm.OpenSubKey($regPath, $FALSE)
         $envpath = $regKey.GetValue("Path", "", [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
         return $envPath
     }
 }

 Process
 {
     # Win32API error codes
     $ERROR_SUCCESS = 0
     $ERROR_DUP_NAME = 34
     $ERROR_INVALID_DATA = 13

     $NewLocation = $NewLocation.Trim();

     If ($NewLocation -eq "" -or $NewLocation -eq $null)
     {
         Exit $ERROR_INVALID_DATA
     }

     [string]$oldPath = GetOldPath
     Write-Verbose "Old Path: $oldPath"

     # Check whether the new location is already in the path
     $parts = $oldPath.split(";")
     If ($parts -contains $NewLocation)
     {
         Write-Warning "The new location is already in the path"
         Exit $ERROR_DUP_NAME
     }

     # Build the new path, make sure we don't have double semicolons
     $newPath = $oldPath + ";" + $NewLocation
     $newPath = $newPath -replace ";;",""

     if ($pscmdlet.ShouldProcess("%Path%", "Add $NewLocation")){

         # Add to the current session
         $env:path += ";$NewLocation"

         # Save into registry
         $regKey = $hklm.OpenSubKey($regPath, $True)
         $regKey.SetValue("Path", $newPath, [Microsoft.Win32.RegistryValueKind]::ExpandString)
         Write-Output "The operation completed successfully."
     }

     Exit $ERROR_SUCCESS
 }

블로그 투고에서 문제를 더 자세히 설명합니다.

현재 승인된 답변은 경로 변수가 PowerShell의 컨텍스트에서 영구적으로 업데이트된다는 의미로 작동하지만 실제로 Windows 레지스트리에 저장된 환경 변수를 업데이트하지는 않습니다.

이를 위해 PowerShell을 사용할 수도 있습니다.

$oldPath=(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path

$newPath=$oldPath+’;C:\NewFolderToAddToTheList\’

Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH –Value $newPath

자세한 내용은 블로그 게시물 PowerShell을 사용하여 환경 경로 수정

PowerShell 커뮤니티 확장을 사용하는 경우 환경 변수 경로에 경로를 추가하는 적절한 명령은 다음과 같습니다.

Add-PathVariable "C:\NewFolderToAddToTheList" -Target Machine

그러면 현재 세션의 경로가 설정되고 사용자가 영구적으로 추가하도록 요구됩니다.

function Set-Path {
    param([string]$x)
    $Env:Path+= ";" +  $x
    Write-Output $Env:Path
    $write = Read-Host 'Set PATH permanently ? (yes|no)'
    if ($write -eq "yes")
    {
        [Environment]::SetEnvironmentVariable("Path",$env:Path, [System.EnvironmentVariableTarget]::User)
        Write-Output 'PATH updated'
    }
}

은 기본 예: 프로파일)에 할 수 .Microsoft.PowerShell_profile.ps1 ), ), ),, 음음, 음음음에 .%USERPROFILE%\Documents\WindowsPowerShell.

제 제안은 다음과 같습니다.

해서 더했다.C:\oracle\x64\binPath이 방법은 잘 작동합니다.

$ENV:PATH

첫 번째 방법은 다음과 같습니다.

$ENV:PATH=”$ENV:PATH;c:\path\to\folder”

을 사용하다$env:pathPowerShell 터미널을 닫았다가 다시 여는 즉시 기본 설정으로 돌아갑니다.이는 변경 내용을 소스 수준(레지스트리 수준)이 아닌 세션 수준에서 적용했기 때문입니다.의 글로벌 $env:path 하다

Get-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PATH

또는 보다 구체적으로:

(Get-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PATH).path

이를 변경하려면 먼저 변경해야 하는 원래 경로를 캡처합니다.

$oldpath = (Get-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PATH).path

이제 새로운 경로의 모양을 정의합니다.이 경우 새 폴더를 추가합니다.

$newpath = “$oldpath;c:\path\to\folder”

": " "가 다음 중 하나, 둘, 셋,$newpath 않으면될 수 .가가 OS 、 가가가가가 。

이제 새 값을 적용합니다.

Set-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PATH -Value $newPath

이제 다음 사항을 마지막으로 확인합니다.

(Get-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PATH).Path

이제 PowerShell 터미널을 재시작(또는 시스템 재부팅)하여 이전 값으로 롤백되지 않도록 할 수 있습니다.

경로의 순서는 알파벳 순으로 변경될 수 있으므로 전체 줄을 확인하십시오.보다 쉽게 하기 위해 세미콜론을 딜리미터로 사용하여 출력을 여러 행으로 분할할 수 있습니다.

($env:path).split(“;”)

@Michael Kropat의 답변을 바탕으로 기존 경로에 새로운 경로를 추가하는 매개 변수를 추가했습니다.PATH변수와 체크박스를 사용하여 존재하지 않는 패스의 추가를 회피합니다.

function Add-EnvPath {
    param(
        [Parameter(Mandatory=$true)]
        [string] $Path,

        [ValidateSet('Machine', 'User', 'Session')]
        [string] $Container = 'Session',

        [Parameter(Mandatory=$False)]
        [Switch] $Prepend
    )

    if (Test-Path -path "$Path") {
        if ($Container -ne 'Session') {
            $containerMapping = @{
                Machine = [EnvironmentVariableTarget]::Machine
                User = [EnvironmentVariableTarget]::User
            }
            $containerType = $containerMapping[$Container]

            $persistedPaths = [Environment]::GetEnvironmentVariable('Path', $containerType) -split ';'
            if ($persistedPaths -notcontains $Path) {
                if ($Prepend) {
                    $persistedPaths = ,$Path + $persistedPaths | where { $_ }
                    [Environment]::SetEnvironmentVariable('Path', $persistedPaths -join ';', $containerType)
                }
                else {
                    $persistedPaths = $persistedPaths + $Path | where { $_ }
                    [Environment]::SetEnvironmentVariable('Path', $persistedPaths -join ';', $containerType)
                }
            }
        }

        $envPaths = $env:Path -split ';'
        if ($envPaths -notcontains $Path) {
            if ($Prepend) {
                $envPaths = ,$Path + $envPaths | where { $_ }
                $env:Path = $envPaths -join ';'
            }
            else {
                $envPaths = $envPaths + $Path | where { $_ }
                $env:Path = $envPaths -join ';'
            }
        }
    }
}

레지스트리에 값을 푸시하는 응답만이 영구적인 변경에 영향을 미칩니다(따라서 이 스레드 상의 대부분의 응답(허용된 응답을 포함)은 영속적으로 영향을 주지 않습니다).Path

은 두 가지 모두에 할 수 있습니다.PathPSModulePath 및을 and의 경우UserSystem또한 기본적으로 새 경로가 현재 세션에 추가됩니다.

function AddTo-Path {
    param ( 
        [string]$PathToAdd,
        [Parameter(Mandatory=$true)][ValidateSet('System','User')][string]$UserType,
        [Parameter(Mandatory=$true)][ValidateSet('Path','PSModulePath')][string]$PathType
    )

    # AddTo-Path "C:\XXX" "PSModulePath" 'System' 
    if ($UserType -eq "System" ) { $RegPropertyLocation = 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' }
    if ($UserType -eq "User"   ) { $RegPropertyLocation = 'HKCU:\Environment' } # also note: Registry::HKEY_LOCAL_MACHINE\ format
    $PathOld = (Get-ItemProperty -Path $RegPropertyLocation -Name $PathType).$PathType
    "`n$UserType $PathType Before:`n$PathOld`n"
    $PathArray = $PathOld -Split ";" -replace "\\+$", ""
    if ($PathArray -notcontains $PathToAdd) {
        "$UserType $PathType Now:"   # ; sleep -Milliseconds 100   # Might need pause to prevent text being after Path output(!)
        $PathNew = "$PathOld;$PathToAdd"
        Set-ItemProperty -Path $RegPropertyLocation -Name $PathType -Value $PathNew
        Get-ItemProperty -Path $RegPropertyLocation -Name $PathType | select -ExpandProperty $PathType
        if ($PathType -eq "Path") { $env:Path += ";$PathToAdd" }                  # Add to Path also for this current session
        if ($PathType -eq "PSModulePath") { $env:PSModulePath += ";$PathToAdd" }  # Add to PSModulePath also for this current session
        "`n$PathToAdd has been added to the $UserType $PathType"
    }
    else {
        "'$PathToAdd' is already in the $UserType $PathType. Nothing to do."
    }
}

# Add "C:\XXX" to User Path (but only if not already present)
AddTo-Path "C:\XXX" "User" "Path"

# Just show the current status by putting an empty path
AddTo-Path "" "User" "Path"

PowerShell에서는 다음과 같이 입력하여 환경변수 디렉토리로 이동할 수 있습니다.

Set-Location Env:

Env:> 디렉토리로 이동합니다.이 디렉토리 내에서:

모든 환경변수를 표시하려면 다음과 같이 입력합니다.

Env:\> Get-ChildItem

특정 환경 변수를 보려면 다음과 같이 입력합니다.

Env:\> $Env:<variable name>, e.g. $Env:Path

환경 변수를 설정하려면 다음과 같이 입력합니다.

Env:\> $Env:<variable name> = "<new-value>", e.g. $Env:Path="C:\Users\"

환경 변수를 제거하려면 다음과 같이 입력합니다.

Env:\> remove-item Env:<variable name>, e.g. remove-item Env:SECRET_KEY

자세한 내용은 환경변수대하여를 참조하십시오.

여기서 Jonathan Leaders가 언급했듯이 '머신' 환경변수를 변경할 수 있도록 하기 위해서는 명령어/스크립트를 상승시키는 것이 중요하지만, 상승된 명령어 중 일부는 Community Extensions를 사용할 필요가 없기 때문에 JeanT의 답변을 수정하고 확장하려고 합니다.스크립트 자체가 상승되지 않은 경우에도 머신 변수를 변경할 수 있습니다.

function Set-Path ([string]$newPath, [bool]$permanent=$false, [bool]$forMachine=$false )
{
    $Env:Path += ";$newPath"

    $scope = if ($forMachine) { 'Machine' } else { 'User' }

    if ($permanent)
    {
        $command = "[Environment]::SetEnvironmentVariable('PATH', $env:Path, $scope)"
        Start-Process -FilePath powershell.exe -ArgumentList "-noprofile -command $Command" -Verb runas
    }

}

대부분의 답변은 UAC에 대응하고 있지 않습니다.여기에서는, UAC 의 문제에 대해 설명합니다.

확장 기능을 합니다.choco install pscxhttp://chocolatey.org/ 경유(쉘 환경을 재시작해야 할 수 있습니다).

다음으로 pscx를 유효하게 합니다.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser #allows scripts to run from the interwebs, such as pcsx

'아예'를 사용합니다.Invoke-Elevated

Invoke-Elevated {Add-PathVariable $args[0] -Target Machine} -ArgumentList $MY_NEW_DIR

확실히 하기 위해 1990년대 Windows에서는 [시작]버튼을 클릭하여 [ PC]우클릭 후 [프로퍼티]를 선택하고 표시되는 대화 상자에서 [환경변수]선택하고 목록에서 [새로 만들기], [편집], [위로 이동] 및 [아래로 이동]를 사용하여 PATH를 변경합니다.전원 셸을 사용하면 나머지 Windows는 여기서 설정한 모든 기능을 사용할 수 있습니다.

네, 이 새로운 방법을 사용할 수 있지만 이전 방법은 여전히 작동합니다.또한 기본 수준에서는 모든 영구 변경 방법이 레지스트리 파일을 편집하는 방식으로 제어됩니다.

PowerShell을 열고 다음을 실행합니다.

[Environment]::SetEnvironmentVariable("PATH", "$ENV:PATH;<path to exe>", "USER")

으로 '이러한'을 추가할 수 있다.C:\vcpkg 영속적으로 나에게PATH: env env 였다.

$current_PATH = [Environment]::GetEnvironmentVariable("PATH", "USER");[Environment]::SetEnvironmentVariable("PATH", "$current_PATH;C:\vcpkg;", "USER")

수 요."USER"로로 합니다."MACHINE"vars 를 하려면 (가 필요하며 system env vars 를 해야 할 수 )Environment로로 합니다.System.Environment ), ), 、 「 」"PROCESS"PATH var변경되지 않음).env var(각각)를 지정합니다."USER"=1 "MACHINE"=2 ★★★★★★★★★★★★★★★★★」"PROCESS"=0 다음은 GetEnvironmentVariableSetEnvironmentVariable 명령어에 대한 매뉴얼입니다.

다른 두 가지 답변은 발견되었지만 큰 단점이 있으므로 사용하지 않는 것이 좋습니다.둘 다 사용SETXPowerShell에 의해 구현되어 env 변수를 영구적으로 변경할 수 있습니다.이러한 명령어의 단점은 시스템 PATH를 로케일 PATH에 복제하고 이를 사용하려면 PowerShell이 필요하다는 것입니다.

setx PATH "$($Env:PATH);C:\vcpkg;"

더 길지만 다른 env 변수와 함께 사용할 수 있습니다.

$($Env:PATH).Split(';') | %{ $str += "$($_.Trim('"'));" }; %{ $str += "C:\vcpkg;" } ; setx PATH $str; %{ $str = "" }

이러한 스크립트는 등가성이 있습니다(여러 번 실행할 수 있습니다).
Windows Powershell windows windows windows windows 。

경로를 영구적으로 추가하다

    $targetDir="c:\bin"
    $oldPath = [System.Environment]::GetEnvironmentVariable("Path","Machine")
    $oldPathArray=($oldPath) -split ';'
    if(-Not($oldPathArray -Contains "$targetDir")) {
        write-host "Adding $targetDir to Machine Path"
        $newPath = "$oldPath;$targetDir" -replace ';+', ';'
        [System.Environment]::SetEnvironmentVariable("Path",$newPath,"Machine")
        $env:Path = [System.Environment]::GetEnvironmentVariable("Path","User"),[System.Environment]::GetEnvironmentVariable("Path","Machine") -join ";"
    }
    write-host "Windows paths:"
    ($env:Path).Replace(';',"`n")

경로 영구 삭제

    $targetDir="c:\bin"
    $oldPath = [System.Environment]::GetEnvironmentVariable("Path","Machine")
    $oldPathArray=($oldPath) -split ';'
    if($oldPathArray -Contains "$targetDir") {
        write-host "Removing $targetDir from Machine path"
        $newPathArray = $oldPathArray | Where-Object { $_ –ne "$targetDir" }
        $newPath = $newPathArray -join ";"
        [System.Environment]::SetEnvironmentVariable("Path",$newPath,"Machine")
        $env:Path = [System.Environment]::GetEnvironmentVariable("Path","User"),[System.Environment]::GetEnvironmentVariable("Path","Machine") -join ";"
    }
    write-host "Windows paths:"
    ($env:Path).Replace(';',"`n")

동적으로 세션에만 변수 이름을 설정해야 할 경우 다음을 사용합니다.

New-Item env:\$key -Value $value -Force | Out-Null

SBF와 Michael의 코드를 조금 더 컴팩트하게 최적화하려고 했습니다.

PowerShell이 자동으로 문자열을 열거값으로 변환하는 유형 강제에 의존하고 있기 때문에 룩업 사전을 정의하지 않았습니다.

또한 조건에 따라 목록에 새 경로를 추가하는 블록을 추출하여 작업을 한 번 수행하고 변수에 저장하여 재사용할 수 있도록 하였습니다.

세션에 되거나 세션에만 됩니다.$PathContainer파라미터를 지정합니다.

명령 프롬프트에서 직접 호출하는 함수나 ps1 파일에 코드 블록을 넣을 수 있습니다.DevEnvAddPath.ps1로 하겠습니다

param(
    [Parameter(Position=0,Mandatory=$true)][String]$PathChange,

    [ValidateSet('Machine', 'User', 'Session')]
    [Parameter(Position=1,Mandatory=$false)][String]$PathContainer='Session',
    [Parameter(Position=2,Mandatory=$false)][Boolean]$PathPrepend=$false
)

[String]$ConstructedEnvPath = switch ($PathContainer) { "Session"{${env:Path};} default{[Environment]::GetEnvironmentVariable('Path', $containerType);} };
$PathPersisted = $ConstructedEnvPath -split ';';

if ($PathPersisted -notcontains $PathChange) {
    $PathPersisted = $(switch ($PathPrepend) { $true{,$PathChange + $PathPersisted;} default{$PathPersisted + $PathChange;} }) | Where-Object { $_ };

    $ConstructedEnvPath = $PathPersisted -join ";";
}

if ($PathContainer -ne 'Session') 
{
    # Save permanently to Machine, User
    [Environment]::SetEnvironmentVariable("Path", $ConstructedEnvPath, $PathContainer);
}

# Update the current session
${env:Path} = $ConstructedEnvPath;

DevEnvRemovePath.ps1에서도 비슷한 작업을 하고 있습니다.

param(
    [Parameter(Position=0,Mandatory=$true)][String]$PathChange,

    [ValidateSet('Machine', 'User', 'Session')]
    [Parameter(Position=1,Mandatory=$false)][String]$PathContainer='Session'
)

[String]$ConstructedEnvPath = switch ($PathContainer) { "Session"{${env:Path};} default{[Environment]::GetEnvironmentVariable('Path', $containerType);} };
$PathPersisted = $ConstructedEnvPath -split ';';

if ($PathPersisted -contains $PathChange) {
    $PathPersisted = $PathPersisted | Where-Object { $_ -ne $PathChange };

    $ConstructedEnvPath = $PathPersisted -join ";";
}

if ($PathContainer -ne 'Session') 
{
    # Save permanently to Machine, User
    [Environment]::SetEnvironmentVariable("Path", $ConstructedEnvPath, $PathContainer);
}

# Update the current session
${env:Path} = $ConstructedEnvPath;

아직까지는 효과가 있는 것 같습니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★, Linux용 powershell을 04 및 Ubuntu 18.04의 경로를 추가하는 .pwsh7.1.3

$ENV:PATH = "/home/linuxbrew/.linuxbrew/bin:$ENV:PATH"

설치되어 있는 시스템보다 우선하도록 특별히 linuxbrew(linux의 경우 homebrew) bin 디렉토리를 추가합니다.그것은 제가 안고 있던 문제를 해결하는 데 도움이 되었고, 이곳이 가장 도움이 되는 장소였지만, 저는 "실험"을 하게 되었습니다.

에 주의::구분자입니다만, 내 윈도에서는 Linux 를 합니다.;이치노

@ali Darabi의 답변에서 레지스트리 키를 편집하는 것이 가장 효과적이지만, Powershell에서 레지스트리 키를 편집할 수 있는 적절한 권한이 없을 때.그래서 regedit에서 직접 편집했습니다.

나는 이 답변에서 그 주제에 대해 더 자세히 말하고 싶다.

또한 Powershell을 재시작해도 변경 내용을 전파하기에 충분하지 않았습니다.레지스트리 새로고침을 트리거하기 위해 태스크 매니저를 열고 explor.exe를 재시작해야 했습니다.

레지스트리를 탐색하는 것은 매우 번거로울 수 있습니다.따라서 사용자에게 친숙한 환경을 유지하기 위해 Powershell에서 다음 작업을 수행할 수 있습니다.

REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey" /d "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment" /f; regedit

마지막으로 열린 창을 특정 레지스트리 경로로 설정하여 다음에 regedit을 열 때 적절한 키로 열 수 있도록 합니다.

언급URL : https://stackoverflow.com/questions/714877/setting-windows-powershell-environment-variables

반응형