You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Invoke运算符(&)与Invoke-Expression为何对同一输入产生不同结果?

Invoke运算符(&)与Invoke-Expression(IEX)的行为差异

我之前一直觉得PowerShell里的Invoke运算符&和Invoke-Expression(常用别名IEX)行为应该差不多,但实际测试后才发现两者的表现完全不一样,看下面的实际执行例子:

用Invoke运算符(&)执行的结果

PS C:\Users\admin> powershell -Command "& {\"\"([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('ZWNobyAnaGVsbG93b3JsZCc=')))\"\"}"
echo 'helloworld'

这里执行后,只是把Base64解码后的命令文本echo 'helloworld'输出了出来,并没有真正执行这条echo命令。

用Invoke-Expression(IEX)执行的结果

PS C:\Users\admin> powershell -Command "IEX \"\"([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('ZWNobyAnaGVsbG93b3JsZCc=')))\"\""
helloworld

而换成IEX之后,解码得到的echo 'helloworld'会被直接当作PowerShell代码执行,最终输出了我们想要的helloworld结果。

核心区别

  • &运算符的作用是调用脚本块、命令或者可执行文件,它不会把字符串内容当作代码解析执行——这里脚本块里的内容是一个字符串运算的结果,所以只会输出这个字符串。
  • Invoke-Expression的核心功能就是将字符串解析为PowerShell代码并执行,所以它会直接运行解码后的命令内容。

内容的提问来源于stack exchange,提问作者Shuzheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:18:59