PowerShell 스크립트에서 이름에 괄호가 포함 된 환경 변수의 값을 얻는 방법은 무엇입니까?PowerShell에서 % ProgramFiles (x86) %와 같은 괄호가있는 환경 변수 이름은 무엇입니까?
일부 변수 이름에는 괄호가 포함되고 다른 변수에는 괄호가없는 유사한 이름이 포함됩니다. 예를 들어 (cmd.exe
사용) :
C:\>set | find "ProgramFiles"
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
우리는 %ProgramFiles%
는 %ProgramFiles(x86)%
와 동일하지 않습니다 것을 알 수있다.
괄호 뒤에 환경 변수 이름의 일부를 무시하기 때문에 PowerShell 코드가 이상하게 작동하지 않습니다. 이것은 의 이름이과 일치하기 때문에 발생하지만, 기존의 환경 변수는 실패하지 않습니다. 잘못된 변수의 올바른 값을 얻습니다. 에 위의 6 라인하기 위해 내가 할 수있는 간단한 변화가
PS> Do-Test
Fail: (2) some other reason
: 여기
내 문제 설명하기 위해 파워 쉘 스크립트 언어의 테스트 기능입니다 :function Do-Test
{
$ok = "C:\Program Files (x86)" # note space between 's' and '('
$bad = "$Env:ProgramFiles" + "(x86)" # uses %ProgramFiles%
$d = "${ Env:ProgramFiles(x86) }" # fail (2), LINE 6
# $d = "$Env:ProgramFiles(x86)" # fail (1)
if ($d -eq $ok) {
Write-Output "Pass"
} elseif ($d -eq $bad) {
Write-Output "Fail: (1) %ProgramFiles% used instead of %ProgramFiles(x86)%"
} else {
Write-Output "Fail: (2) some other reason"
}
}
을 그리고 여기에 출력의 % ProgramFiles (x86) %의 올바른 값을 얻으시겠습니까?
참고 :이 게시물의 텍스트에서 환경 변수에 대한 배치 파일 구문을 사용하여 편리한 축약 형으로 사용하고 있습니다. 예를 들어 % SOME_VARIABLE %는 "이름이 SOME_VARIABLE 인 환경 변수의 값"을 의미합니다. PowerShell에서 제대로 이스케이프 된 구문을 알고 있다면이 질문을하지 않아도됩니다.
유용 할 수도 있습니다. http://geekswithblogs.net/Lance/archive/2009/12/29/program-files-environment-variable-in-powershell.aspx – Kiquenet