我想使用间接引用变量。 我是在命令提示符下设置它
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)
的内容。
有人可以建议,正确的语法是什么,我尝试阅读powershell帮助,但是没有找到解决方案,谢谢!
答案 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