PATH 환경변수를 설정하는 것은 이전 명령 프롬프트에만 영향을 준다는 것을 알게 되었습니다. PowerShell의 환경 설정이 다른 것 같습니다. PowerShell(v1)의 환경 변수를 변경하려면 어떻게 해야 합니까?
참고:
변경 사항을 영구적으로 만들고 싶기 때문에 PowerShell을 실행할 때마다 설정할 필요가 없습니다. PowerShell에 프로필 파일이 있습니까? 유닉스의 Bash 프로파일 같은 거요?
실제 환경 변수 변경은 다음에 의해 수행될 수 있다. 'env: 네임스페이스 / 드라이브' 정보를 사용합니다. 예를 들어, 이것은 code가 경로 환경 변수를 업데이트합니다.
$env:Path = "SomeRandomPath"; (replaces existing path)
$env:Path += ";SomeRandomPath" (appends to existing path)
환경 설정을 영구적으로 만드는 방법이 있지만 PowerShell에서만 사용하는 경우 당신의 프로필을 사용하여 시작하기에 훨씬 더 좋습니다. 설정. 시작 시 PowerShell은 .ps1을 실행합니다. 'WindowsPowerShell' 디렉터리에서 찾을 수 있는 파일: 내 문서 폴더. 일반적으로 profile.ps1이 있습니다. 이미 그곳에 있습니다. 내 컴퓨터의 경로는
C:\Users\JaredPar\Documents\WindowsPowerShell\profile.ps1
또한 다음을 사용하여 사용자/시스템 환경 변수 영구적으로(쉘 재시작 후에도 지속됨)를 수정할 수 있습니다.
시스템 환경 변수 수정
[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")
&Solarisdvd PowerShell 프롬프트합니다:
setx PATH "$env:path;\the\directory\to\add" -m
그러면 텍스트를 볼 수 있습니다.
SUCCESS: Specified value was saved.
세션, 재시작하여 변수를 사용할 수 있습니다. 임의의 변수 설정 '' 세스 데 사용될 수도 있습니다. 유형 '세스 /?' 의 프롬프트합니다 설명서.
이런 방식으로 저장할 수 있는 경로를 메싱 전에 반드시 복사본인 수행여 > >, 경로, 기존 경로 '$ env: 아리우스 '의 PowerShell 프롬프트합니다.
[# 39 의 JeanT& 오토메이티드] 같은 (https://stackoverflow.com/a/30694253/27581), 내가 원하는 건 추가 추상 수립하였습니다 길로. # 39 의 오토메이티드 JeanT& 달리 사용자 상호 작용 없이 실행하십시오 迈向 필요하다. 다른 비헤이비어를 찾고 있었어요.
이것은 it& # 39 의 경우에 유용하다.
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 ';'
}
}
체크아웃하려고 [내 사진을] (https://gist.github.com/mkropat/c1226e0cc2ca941b23a9) '기능을 해당하는' 안티파스 제거하시겠습니까.
비록 현재 수락됨 답을 얻을 수 있다는 점에서 작동됨 가변적입니다 있겠느 업데이트되도록 경로를 측면에서 PowerShell 얻게된다면 doesn& 업데이트하십시오 환경 변수 t # 39, 실제로 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
거의 모든 답을 영구적입니다 변경률 똑같이 문제: 그들은 길을 분할합니다 레지스트리 값을.
'가치' 에 'a' '' '스텐비론망바리이블 돌리고 REG_EXPAND_SZ %SystemRoot%\system32 REG_SZ' 가치 'C:\Windows\system32'.
다른 모든 변수가 경로에 손실됩니다 잘 알려져 있다. # 39 더 이상 ',' %myNewPath% 사용하여 새로 추가 수준들과 won& 빗나갔다.
[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
}
내가 이 문제에 대해 보다 자세히 블로그 포스트.
현재 세션에 대한 추가 확인한 후 사용자가 영구적으로 경로를 설정합니다.
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"'), 보통 http://support. dell. "'%userprofile%\documents\windowspowershell"'.
내가 바탕으로 [@Michael Kropat& # 39 의] [1] '길' 에 추가된 새로운 경로를 오토메이티드 매개변수입니다 prepend 기존 변수 및 추가 검사를 피하기 위해 존재하지 않는 경로:
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 ';'
}
}
}
}
[1]: https://stackoverflow.com/a/34844707/1509300, Michael " Kropat".
이를 [조너선 지시선] (https://stackoverflow.com/users/1689770/jonathan-leaders) 언급한 [here] (https://stackoverflow.com/a/28596275) / 스크립트 명령을 실행할 수 있어 높은 환경 변수를 & # 39 를 변경할 수 있습니다, 하지만 몇 가지 명령을 실행하는 machine& # 39, # 39, 해야 할 일이 없는 높은 doesn& 도왔으매 I& 수정하고 확장할 수 있는 커뮤니티 확장명은; d # 39 와 같은 [JeanT& # 39 의] (https://stackoverflow.com/users/1116269/jeant) [답변] (https://stackoverflow.com/a/30694253) 에 시스템 자체를 바꾸는 방법을 활용할 수 있다 하더라도, t # 39 실행하십시오 com/go/4e6b330a_kr 수행됨 스크립트입니다 isn& 되었다.
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
}
}
대부분의 답변 aren& # 39, t 주소지정에 UAC. 이 닫히지만 UAC 문제.
처음 설치할 PowerShell 커뮤니티 확장장치: 초코 설치처 ps크스 ' (http://chocolatey.org/) 를 통해 (셸 환경을 다시 시작해야 할 수 있습니다).
그럼 ps크스 활성화하십시오
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser #allows scripts to run from the interwebs, such as pcsx
'다음' 높은 호출하십시오
Invoke-Elevated {Add-PathVariable $args[0] -Target Machine} -ArgumentList $MY_NEW_DIR
내 제안에 로만스였나 하나.
나는 이 환경 변수를 추가할 수 있으며, 이 '길' '' C:\oracle\x64\bin 테스트되었습니다 있겠느 작동합니다.
$ENV:PATH
첫 번째 방법은 간단히 해야 할 것:
$ENV:PATH=”$ENV:PATH;c:\path\to\folder”
하지만 이 변경 안 영구적입니다. env: $ 는 기본적으로 '길' 로 다시 다시 다시 문을 닫기 전에 빨리 powershell 터미널, 무슨 말을 했는지. 그건 아닌데 변경하십시오 선수단 적용한 때문에 세션 수준 및 소스 수준의 (원하는거요 레지스트리로 수준). '길' 의 글로벌 가치 표시하십시오 확신하느뇨: $ env:
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”
참고: '외모' $ 뉴파스 원하는 방식으로 볼 수 있어야 합니다. 그렇지 않을 경우 해당 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 터미널 (심지어 머시닝할 재부팅하십시오) 를 다시 이전 값에 싫어하겠어 롤백에서 것이 있다.
변경할 수 있도록 오더할 기록하십시오 경로가 애태우면 문자순으로 도왔으매 smartupdate 전체 할말이다 확인할 수 있습니다 보다 쉽게 분할할 수 있습니다) 를 사용하여 출력입니다 행뿐만 세미콜론이 구분 기호로:
($env:path).split(“;”)
시도는 해봤는데 최적화 [SBF& # 39 의] [1] 및 [Michael& # 39 의] [2] 코드가 좀 좀 더 쉽게 컴팩트형.
난 또 새로운 길을 추가하므로 목록에 나온 아웃해야 블록의 기반으로 한 번 저장됩니까 찼음을 도왔으매 작동합니까 완료되어도 변수가 재사용률이.
그런 가공할지 있겠느 발려짐 세션에 대한 '$ 파스콘타이너 따라' 매개변수입니다.
우리가 할 수 있는 함수 또는 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;
지금까지 마치 작동합니까.
[1]: # 48624689 https://stackoverflow.com/questions/714877/setting-windows-powershell-environment-variables/48624689 [2]: # 34844707 https://stackoverflow.com/questions/714877/setting-windows-powershell-environment-variables/34844707
디렉토리 내에서 한 환경 변수를 입력하여 PowerShell, 이동할 수 있습니다.
Set-Location Env:
이 너회와 다운스트림에서 Env:\>. 디렉터리입니다. 이 내에서 디렉터리입니다.
모두 볼 수 있는 환경 변수, 유형:
Env:\> Get-ChildItem
특정 환경 변수 mm_mail_doc. 볼 수 있습니다.
Env:\> $Env:<variable name>, e.g. $Env:Path
환경 변수 설정, 유형:
Env:\> $Env:<variable name> = "<new-value>", e.g. $Env:Path="C:\Users\"
환경 변수를 지루려면 mm_mail_doc.:
Env:\> remove-item Env:<variable name>, e.g. remove-item Env:SECRET_KEY
자세한 정보는 in [환경 변수에 대한] [1] .
[1]: 보기 = powershell 6 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?