AI 智能体在 Windows 反复报错的原因:PowerShell 5.1 与 PowerShell 7 的错配

现象:命令被反复重写

在 DSH 里让智能体执行串联命令,返回的常常是:

The token '&&' is not a valid statement separator in this version.

换成 ; 能过,但下一轮它又写出 cmd1 && cmd2,同一段对话里反复重写。另一类报错看着像命令写错,实为 curl、wget 被别名指向 Invoke-WebRequest,curl -s URL 因此报参数不匹配,真正的 curl.exe 就在 System32 下。

共同点是:报错文本描述的是 Windows PowerShell 5.1 的语法或别名限制,而不是命令逻辑有错。智能体复述原因时往往只说“当前版本不支持该语法”,不指明版本,用户便以为命令写错了。

Windows 出厂只带 PowerShell 5.1

Windows PowerShell 5.1 在 Windows 10、Windows 11 与 Server 2016 及更高版本中默认安装,没有任何 Windows 版本自带 PowerShell 7。原因是 5.1 属系统组件、生命周期绑在系统上(Server 2022 支持到 2031 年),而 7 是跑在 .NET 上的独立应用。

系统 出厂自带引擎
Windows 10 / 11(21H2 至 25H2) Windows PowerShell 5.1
Windows Server 2016 / 2019 / 2022 / 2025 Windows PowerShell 5.1
任何版本自带 PowerShell 7 无

测试机为 Windows 11 25H2、build 26200,System32\WindowsPowerShell 下只有 v1.0 一个目录。

AI 工具按 PowerShell 7 的语法写命令

模型语料里 POSIX 与 PowerShell 7 的写法占多数,执行器落在 5.1 上,两边假设就对不上。

工具 记录 现象
Claude Code #83928 PowerShell 工具走 5.1,“模型按 POSIX 与 PowerShell 7 的习惯生成语法,5.1 跑不了”
Gemini CLI #20773 && 触发 ParserError,“阻断大量 Windows 用户的核心功能”
Gemini CLI #27097 run_shell_command 硬编码 powershell.exe,提示词要求改也无效
Cursor 论坛 151887 包装脚本在 5.1 上 ParserError,回退旧版终端才恢复
Cursor 论坛 143405 官方承认是已知问题,“尤其影响非英文区域设置”,成因是编码

反向证据也存在:Copilot CLI #411 有用户要求“支持 5.1”,同一项目 #1680 却因 pwsh.exe 硬编码六处,导致没装 7 的机器完全不可用。可见问题不是版本优劣,而是执行器与模型语法的错配方向。

DSH 的处理是候选链:Program Files\PowerShell\7\pwsh.exe、PATH 中的 pwsh.exe、最后 System32\WindowsPowerShell\v1.0\powershell.exe,即 7 优先、5.1 兜底,并在每条命令前注入 UTF-8 设置,规避 5.1 的 OEM 代码页问题。官方讨论 #5220 指出这种静默回退的代价:“工具照常工作,但行为语义变成 5.1,用户和 agent 无法把行为与文档不一致归因到 shell 版本。”

两种引擎的实际差异:

写法 Windows PowerShell 5.1 PowerShell 7
cmd1 && cmd2 解析失败,整条不执行 正常串联
$a ?? "默认值" 不支持 支持
curl -s URL 命中别名,参数不匹配 调用真正的 curl.exe
原生程序输出 OEM 代码页,中文易乱码 默认 UTF-8

切换:一条命令

winget install --id Microsoft.PowerShell --source winget --installer-type wix

--installer-type wix 不能省。PowerShell 7 从 7.6.0 起,winget 默认装 MSIX,而 MSIX 版的 $PSHOME 只读、不支持 Remoting,入口还藏在 WindowsApps 下。MSI 版落在 C:\Program Files\PowerShell\7,正好是 DSH 的第一候选。

用途 Windows PowerShell 5.1 PowerShell 7(MSI)
可执行文件 System32\WindowsPowerShell\v1.0\powershell.exe Program Files\PowerShell\7\pwsh.exe
系统级模块 Program Files\WindowsPowerShell\Modules Program Files\PowerShell\Modules
用户级模块与 profile 文档\WindowsPowerShell\ 文档\PowerShell\

装完看四项:PSEdition 从 Desktop 变 Core、$PSHOME 指向 Program Files\PowerShell\7、Get-Command curl 从 Alias 变 Application、a && b 能正常输出。然后重启 DSH,它在启动时缓存执行器路径,不重启仍用 5.1。

结语

三件事叠在一起:Windows 只带 5.1、模型按 7 的语法写命令、工具把执行器写死。安装 PowerShell 7 解决了前两件之间的落差,5.1 原样保留、随时可退;但硬编码 powershell.exe 的工具(Gemini CLI 至今如此)依旧走 5.1,只能等上游。判断一个 AI 工具是否可靠,看它探测执行器的那几行代码,比看宣传更有用。

posted @ 2026-11-06 18:30  PC2005-cloud  阅读(4)  评论(0)    收藏  举报