Powershell - 指针或引用变量

时间:2016-12-02 11:07:55

标签: 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)的内容。

有人可以建议,正确的语法是什么,我尝试阅读帮助,但是没有找到解决方案,谢谢!

1 个答案:

答案 0 :(得分: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
}

将输出:

MyPcName
Console
true

您可以通过在PowerShell中输入Get-Help about_environment_variables来找到有关此内容的更多信息:

  

Get-Item -Path Env:* |获取会员

     

显示环境变量      您可以使用包含Item名词(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)。

然后你可以打电话

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