我有一个存储在字符串变量中的条件,我想在if语句中使用它。
在这个例子中,总是有一个匹配,因为变量不是零或空,等等。它不是作为条件“执行”变量。
我希望“执行”变量中存储的条件。
$myCheckTest = '$test -eq 4'
$test = 5
if ($myCheckTest) {
write-host "TEST MATCH"
} else {
write-host "TEST NO MATCH"
}
这不需要引号,如:$myCheckTest = $test -eq 4
,但条件是外部存储在json文件中的。
我也尝试了if ( & {$myCheckTest} ) {
,因为我认为这与JavaScript if ( eval(condition) )
相当,但这仍然没有给我正确的答案“测试不匹配”,我期望。
我知道powershell IF condition in a Variable,但这里的条件不像我那样在字符串变量中。
3条答案
按热度按时间hc2pp10m1#
可以使用
$ExecutionContext.InvokeCommand.ExpandString
方法计算字符串表达式:注意,反勾号(```)防止第一个美元被替换,因此实际的字符串表达式将类似于:
$($test -eq 4)
或在您的函数中:
执行此类操作的一种更常见的方法是使用脚本块:
of1yzvn42#
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-expression
一位同事向我介绍了
Invoke-Expression
命令:这在我的实际脚本中是有效的。
soat7uwm3#
您可以使用
ScriptBlock.InvokeWithContext
来执行以下操作: