我正在尝试做类似以下的事情...
New-Variable -Name "state_$name" -Value "True"
if ("state_$name" -eq "True") {
Write-Host "Pass"
} else {
Write-Host "Fail"
}
我已经尝试了许多不同的方法,但是它并不能按照我希望的方式工作。我需要编写if语句来说明动态变量,因为这些值将在foreach
循环内更改。
我在上面提供了一个简单的示例来证明概念。
答案 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' }