2011-01-11 2 views
31

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에서 제대로 이스케이프 된 구문을 알고 있다면이 질문을하지 않아도됩니다.

+0

유용 할 수도 있습니다. http://geekswithblogs.net/Lance/archive/2009/12/29/program-files-environment-variable-in-powershell.aspx – Kiquenet

답변

50

심플. 변경 선 6 대괄호 안에 공백을 제거합니다 : 당신은 그냥 {}로 포함하는 변수()를 포장해야

$d = "${Env:ProgramFiles(x86)}"  # LINE 6 (NO spaces inside brackets) 

. 브래킷 안에는 공백이 없어야합니다.

+1

감사합니다. @ravikanth! 나는 "$ {Env : ProgramFiles (x86)}"으로 실패했으며 공백이 있음에 유의하십시오. 나는 이것이 $ {Env : ProgramFiles (x86)}과 다르다는 것을 알아야한다. 나는 명확성을 위해 당신의 대답에 몇 가지 추가적인 텍스트를 추가했다. – jwfearn

+0

내 게시물과 동일한 추가 줄을 제거했습니다. 네가 괜찮 았으면 좋겠다. – jwfearn

+0

예, 업데이트 해 주셔서 감사합니다. – ravikanth

관련 문제