如何在PowerShell中执行存储于字符串变量的if条件?
PowerShell执行字符串中的条件表达式
你的问题核心是:字符串变量本身是非空值,所以if ($myCheckTest)永远判定为真,必须让PowerShell执行字符串内部的条件逻辑,而不是判断字符串本身。
解决方案1:使用Invoke-Expression直接执行表达式字符串
Invoke-Expression(可简写为iex)可以直接执行字符串形式的PowerShell代码,返回表达式的结果:
$myCheckTest = '$test -eq 4' $test = 5 if (Invoke-Expression $myCheckTest) { Write-Host "TEST MATCH" } else { Write-Host "TEST NO MATCH" }
解决方案2:将字符串转为脚本块执行
更安全可控的方式是把字符串编译为脚本块(scriptblock),再调用执行:
$myCheckTest = '$test -eq 4' $test = 5 # 将字符串转为可执行的脚本块 $conditionScript = [scriptblock]::Create($myCheckTest) # 调用脚本块执行条件判断 if (& $conditionScript) { Write-Host "TEST MATCH" } else { Write-Host "TEST NO MATCH" }
为什么之前的尝试无效?
你之前用& {$myCheckTest}的方式,这个脚本块只是返回$myCheckTest变量的字符串值,而非执行字符串内部的$test -eq 4逻辑,所以字符串本身非空,依然会判定为真。而[scriptblock]::Create()会把字符串内容解析为可执行的PowerShell逻辑,执行后返回条件判断的布尔结果。
注意:从外部JSON加载并执行脚本字符串存在安全风险,确保来源可信,避免恶意代码注入。
内容的提问来源于stack exchange,提问作者Maurice van 't Loo
相关产品推荐
相关产品推荐

