针对动态变量的 If 语句
If Statement Against Dynamic Variable
我正在尝试做类似于以下的事情...
New-Variable -Name "state_$name" -Value "True"
if ("state_$name" -eq "True") {
Write-Host "Pass"
} else {
Write-Host "Fail"
}
我已经尝试了多种不同的方法,但它并没有完全按照我希望的方式工作。我需要编写 if 语句来说明动态变量,因为这些值将在 foreach
循环内发生变化。
我在上面提供了一个简单的例子来证明概念。
替换
if ("state_$name" -eq "True") {
与:
if ((Get-Variable -ValueOnly "state_$name") -eq "True") {
也就是说,如果您的变量名称仅通过可扩展字符串间接已知,则您不能直接引用它(就像您通常使用 $
印记) - 你需要通过Get-Variable
获取它的值,如上图
但是,正如 JohnLBevan 指出的那样,您可以 将变量 object 存储在另一个(非动态)变量中,这样您就可以然后通过 .Value
属性.
获取和设置动态变量的值
将-PassThru
添加到New-Variable
直接调用returns变量对象,无需后续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' }
我正在尝试做类似于以下的事情...
New-Variable -Name "state_$name" -Value "True"
if ("state_$name" -eq "True") {
Write-Host "Pass"
} else {
Write-Host "Fail"
}
我已经尝试了多种不同的方法,但它并没有完全按照我希望的方式工作。我需要编写 if 语句来说明动态变量,因为这些值将在 foreach
循环内发生变化。
我在上面提供了一个简单的例子来证明概念。
替换
if ("state_$name" -eq "True") {
与:
if ((Get-Variable -ValueOnly "state_$name") -eq "True") {
也就是说,如果您的变量名称仅通过可扩展字符串间接已知,则您不能直接引用它(就像您通常使用 $
印记) - 你需要通过Get-Variable
获取它的值,如上图
但是,正如 JohnLBevan 指出的那样,您可以 将变量 object 存储在另一个(非动态)变量中,这样您就可以然后通过 .Value
属性.
获取和设置动态变量的值
将-PassThru
添加到New-Variable
直接调用returns变量对象,无需后续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' }