powershell - If语句反对动态变量
问题描述
我正在尝试做类似于以下的事情......
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") {
也就是说,如果您的变量名称仅通过可扩展字符串间接知道,则您不能直接引用它(就像您通常使用$
sigil 一样) - 您需要通过获取它的值Get-Variable
,如上所示。
但是,正如JohnLBevan指出的那样,您可以将变量对象存储在另一个(非动态)变量中,这样您就可以通过.Value
property获取和设置动态变量的值。
添加-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' }
推荐阅读
- python - 如何在python中模拟后续函数调用?
- python - SGD算法从零开始预测电影评分
- python - 如何使用 cv2 计算图像中的不同颗粒?
- python - 如何将具有 numpy.int 类型的 dict 编码为 protobuf 众所周知的类型值?
- php - Laravel 8:列截断数据
- python - Tensorflow set_intra_op_parallelism_threads 和 set_inter_op_parallelism_threads 对线程使用没有任何影响
- sql - 需要按类别查找计数差异
- python - 如何同时运行两个python函数?
- typescript - 在 npm 包中使用声明文件时如何解析声明文件中的绝对路径
- c# - 将 Opentelemetry 添加到 .Net Core 工作人员服务