PowerShell中如何将数学运算符赋值给变量构建动态表达式
实现方案
你原本的写法无法正常执行的核心原因是:PowerShell不会自动将变量中存储的运算符字符识别为语法层面的运算符号,需要先把所有运算数、运算符拼接为完整的表达式字符串,再转为可执行的逻辑运行。
方案1:使用Invoke-Expression快速实现
可控运算数来源的场景下可以直接用该方案,支持任意长度的表达式拼接:
# 定义运算符变量,043对应+、045对应-,*对应042、/对应047可按需替换 $operator1 = [char][byte]'043' $operator2 = [char][byte]'045' # 拼接完整表达式字符串,支持动态增加任意数量的运算数和运算符 $expStr = "1 $operator1 20 $operator1 30 $operator1 100 $operator2 51" # 执行表达式得到结果 $calculation = [int](Invoke-Expression $expStr) # 输出结果(注意变量前要加$,否则只会输出字符串"calculation") Write-Host $calculation
执行后输出结果为预期的100。
方案2:使用脚本块实现更安全的执行
如果表达式中存在不可信的输入内容,用脚本块的方式可以降低注入风险:
$operator1 = [char][byte]'043' $operator2 = [char][byte]'045' $expStr = "1 $operator1 20 $operator1 30 $operator1 100 $operator2 51" # 创建脚本块 $calcScript = [scriptblock]::Create($expStr) # 执行脚本块得到结果 $calculation = [int]($calcScript.Invoke()) Write-Host $calculation
内容的提问来源于stack exchange,提问作者Diego Dias
相关产品推荐
相关产品推荐

