2016-12-02 182 views
1

我想使用間接引用變量。 我在命令提示符下設置此Powershell - 指針或引用變量

SET RiskScheduler=true 

我的代碼是這樣的

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

我想達到同樣應該印有像這樣的代碼

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

錯誤我我得到的是

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

選項1

你可以這樣做:

$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的:

MyPcName 
Console 
true 

您可以通過輸入Get-Help about_environment_variables到PowerShell中找到更多相關信息:

獲取,項目-Path ENV:* | Get-Member

顯示環境變量 您可以使用包含Item名詞(Item cmdlet)的cmdlet到 顯示並更改環境變量的值。由於 環境變量沒有子項,因此Get-Item 和Get-ChildItem的輸出是相同的。

當您引用環境變量時,請鍵入Env:驅動器名稱 ,後跟變量的名稱。例如,以顯示COMPUTERNAME環境變量的值 ,類型:

獲取-Childitem Env的計算機:


選項2

另一種選擇是使用本功能:

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

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

The函數遍歷所有可用的環境變量並返回您之後的那個(在此例中爲$Env:COMPUTERNAME)。

然後,您可以撥打

Write-Host $myvar.Value

顯示的COMPUTERNAME

值。如果你有變量名的數組你想要的值:

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

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

它輸出(對我而言):

MyPcName 
Console 
true 
+0

實際上在我的情況下,「名稱」是可變的,有很多這樣的值,我想把它們放在數組中並逐個閱讀,不想重複編寫代碼。你能提出一些建議嗎? –

+0

通過簡單地創建一個變量名稱數組,然後遍歷每個變量名稱,調用'Get-EnvVar'來獲取值 – Bassie

+0

@AmarKumbhar我可以通過我的解決方案來實現這一點,我找到了實際的解決方案並將其添加到我的頂部回答,希望有所幫助 – Bassie