如果针对动态变量声明

时间:2018-11-19 02:39:14

标签: powershell if-statement foreach

我正在尝试做类似以下的事情...

New-Variable -Name "state_$name" -Value "True"
if ("state_$name" -eq "True") {
    Write-Host "Pass"
} else {
    Write-Host "Fail"
}

我已经尝试了许多不同的方法,但是它并不能按照我希望的方式工作。我需要编写if语句来说明动态变量,因为这些值将在foreach循环内更改。

我在上面提供了一个简单的示例来证明概念。

1 个答案:

答案 0 :(得分:1)

替换

if ("state_$name" -eq "True") {

具有:

if ((Get-Variable -Value "state_$name") -eq "True") {

也就是说,如果您的变量名只能通过扩展字符串间接地 知道,则不能直接引用它(就像通常使用$标记一样)-您需要通过Get-Variable 获取其值,如上所示。

但是,正如JohnLBevan所指出的,您可以将变量 object 存储在另一个(非动态)变量中,这样您就可以获取并设置动态变量的值通过.Value属性
-PassThru添加到New-Variable调用中将直接返回变量对象,而无需随后的Get-Variable调用:

$dynamicVarObject = New-Variable -Name "state_$name" -Value "True" -PassThru
if ($dynamicVarObject.Value -eq "True") {
    "Pass"
} else {
    "Fail"
}

也就是说,通常有更好的替代方法来创建变量,例如使用 hashtables

$hash = @{}
$hash.$name = 'True'

if ($hash.$name -eq 'True') { 'Pass' } else { 'Fail' }