【问题标题】:Pointer or reference variables指针或引用变量
【发布时间】:2016-12-02 11:07:54
【问题描述】:

我想使用间接引用变量。 我在命令提示符处设置这个

SET RiskScheduler=true

我的代码是这样的

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

我想达到同样的效果应该用这样的代码打印

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

我得到的错误是

无法处理参数,因为参数“路径”的值无效。 更改“路径”参数的值并再次运行该操作。 在 D:\tmp\buildtools\udclient.6.2\ud_clean.PS1:37 char:17 + 写入主机 $Env:

我正在寻找首先评估 $name 然后评估 $Env:(value of $name) 的东西。

有人可以建议,正确的语法是什么?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    选项 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 Env:计算机名


    选项 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
    

    【讨论】:

    • 实际上在我的情况下“名称”是可变的,有很多这样的值,我想把它们放在数组中并一一读取,不想写重复的代码。能不能给点建议。
    • 你可以通过我的解决方案来实现这一点,方法是简单地创建一个变量名数组,然后遍历每个变量名,调用Get-EnvVar 来检索值
    • @AmarKumbhar 我找到了实际的解决方案并将其添加到我的答案的顶部,希望对您有所帮助
    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多