2016-12-02 1 views
1

간접 참조 변수를 사용하고 싶습니다. 나는 명령 프롬프트에서 다음을 설정하고Powershell - 포인터 또는 참조 변수

SET RiskScheduler=true 

내 코드는 내가이

$name='RiskScheduler' 
Write-host $name    # prints RiskScheduler 
Write-Host $Env:$name   # gives error 

오류 나는 다음과 같은 코드로 인쇄해야 같은를 달성하고자하는이

Write-Host "$Env:RiskScheduler" # prints true 

같다 받고있는 것은

Cannot process argument because the value of argument "path" is invalid. Change the value of the "path" argument and ru 
n the operation again. 
At D:\tmp\buildtools\udclient.6.2\ud_clean.PS1:37 char:17 
+ Write-Host $Env: <<<< `$name` 
    + CategoryInfo   : InvalidArgument: (:) [], PSArgumentException 
    + FullyQualifiedErrorId : Argument 

나는 먼저 $name을 평가 한 다음 $Env:(value of $name)을 평가할만한 것을 찾고 있습니다.

누구든지 올바른 구문이 무엇인지 제안 해 주실 수 있습니까? 그러나 답을 찾지 못했습니다. 도움을 받으 셨지만 해결책을 찾지 못했습니다. 감사합니다!

답변

2

당신이 할 수있는 일

옵션 :

$x = 'RiskScheduler' 
Write-Host (Get-Item env:$x).Value 

어느 것입니다 귀하의 경우 출력 true

당신은 변수 이름의 목록이있는 경우 :

$varNames = @('COMPUTERNAME', 'SESSIONNAME', 'RiskScheduler') 

ForEach($varName in $varNames) { 
    Write-Host (Get-Item env:$varName).Value 
} 

어느 것이 ou tput을 :

은 Get-항목 -Path 봉투 : 당신은 PowerShell을에 Get-Help about_environment_variables를 입력하여 이에 대한 자세한 정보를 찾을 수 있습니다

MyPcName 
Console 
true 

* | Get-Member

환경 변수 표시 항목 명사 (Item cmdlet)가 포함 된 cmdlet을 사용하여 환경 변수 값을 표시하고 변경할 수 있습니다. 환경 변수에 자식 항목이 없으므로 Get-Item 및 Get-ChildItem의 출력은 동일합니다.

환경 변수를 참조 할 때 Env : 드라이브 이름 과 변수 이름을 차례로 입력하십시오.예를 들어, 유형 COMPUTERNAME 환경 변수의 값 을 표시합니다 :

은 Get-ChildItem을 봉투 : 컴퓨터 이름


옵션 2

이를 사용하는 또 다른 방법은 것 기능 :

function Get-EnvVar($Name) { 
    $allVars = dir env: 

    foreach ($var in $allVars) { 
     If ($var.Name -eq $Name) { 
      return $var 
     } 
    } 
} 

함수는 사용 가능한 모든 환경 변수를 반복하고 사용자가 수행 한 환경 변수를 반환합니다 (이 경우 $Env:COMPUTERNAME). 출력

$varNames = @('COMPUTERNAME', 'SESSIONNAME', 'RiskScheduler') 

ForEach($varName in $varNames) { 
    $var = Get-EnvVar -Name $varName 
    Write-Host $var.Value 
} 

: 당신이 변수 이름의 배열이있는 경우

당신은 다음의 값을 원하는 COMPUTERNAME

의 값을 표시

Write-Host $myvar.Value

를 호출 할 수 있습니다 나를 위해 :

MyPcName 
Console 
true 
+0

사실 내 이름은 "name"이 가변적인데, 그러한 값이 많이 있습니다. 배열에 넣고 하나씩 읽고 싶습니다. 반복 된 코드를 작성하고 싶지는 않습니다. 너는 약간 제안을 줄 수 있는다. –

+0

당신은 변수 이름의 배열을 만든 다음 각각의 변수를 반복하여'Get-EnvVar'를 호출하여 값을 검색 할 수 있습니다. – Bassie

+0

@AmarKumbhar 실제 솔루션을 찾았고이를 내 최상위에 추가했습니다. 대답, 도움이되는 희망 – Bassie

관련 문제