Skip to content
AI SI Daily
English

搜索全站

↑↓ 选择 · Enter 打开 · Esc 关闭

● 亲手实测

同样是 AI 编程,凭什么 Mac 比你丝滑?Windows 用户必做的第一步

AI 写的命令在 Windows 上总报错?装 PowerShell 7、让 Agent 用 pwsh、加 agent-skills 和 coreutils,15 分钟补齐差距。

滴滴点到原发于 知乎

你有没有遇到过这种场景:

朋友用 Mac,打开 Cursor 或者 Claude Code,一句“帮我写个批量重命名脚本”,AI 刷刷刷输出、直接运行、完美搞定。你也在 Windows 上试了一下,同样一句话,AI 先是犹豫了半天,然后丢给你一段代码——运行,报错;改了再运行,还是报错。几个回合下来,token 烧了一堆,脚本还是没跑通。

憋屈吗?憋屈。

但你有没有想过,这真不是你的问题,也不是 Windows 的问题。问题出在 AI 的训练语料上。

AI 的世界里,命令行只有 Linux 和 macOS

现在所有主流 AI 大模型——不管是 Claude、GPT 还是 Gemini——它们的训练数据里,命令行的操作示例几乎全是 Linux 和 macOS 风格。ls 而不是 dir,grep 而不是 Select-String,chmod 而不是 icacls。

更要命的是,AI 默认假定你在用 Bash/Zsh 这类 Shell。当它面对 Windows 自带的 Windows PowerShell 5.1 时,就像让一个只会说英语的人去读法语菜单——大概能猜对几句,但大部分都在瞎蒙。

那 PowerShell 5.1 到底差在哪儿?三个核心问题:

  • 编码问题——中文乱码重灾区。PowerShell 5.1 默认使用 UTF-8 with BOM 甚至 Windows-1252 编码。AI 生成的内容往往是无 BOM 的 UTF-8,一碰到中文就乱码。你让 AI 处理一个中文文件名试试?报错报到你怀疑人生。
  • 命令行为差异。curl 在 PowerShell 5.1 里实际上是 Invoke-WebRequest 的别名,参数体系完全不一样。AI 给了一行 curl 命令,你在 PowerShell 5.1 里跑——行为跟你预期的完全不一样。
  • 与现代工具链的摩擦。Node.js、Python、Git 这些现代开发工具的输出都是 UTF-8,默认走 Linux 约定。PowerShell 5.1 是 2016 年发布的老将,基于旧版 .NET Framework,跟这些新东西天然八字不合。

结果就是:你每跟 AI 对话一次,就有一大截 token 被平白无故浪费在了“纠错”上。不是 AI 不够聪明,是它跟你之间隔了一个代际差。

那怎么办?

三个名字,先搞清楚谁是谁

在动手之前,我们得先理清几个容易混淆的概念。很多 Windows 用户看到“PowerShell”“Windows PowerShell”“Windows Terminal”已经完全晕了。

名称 它是什么 启动命令 你该怎么用
Windows PowerShell 5.1 Windows 自带的旧版 Shell(2016 年发布,基于 .NET Framework) powershell 或 powershell.exe 留给旧模块和系统兼容,别让它出现在日常工作中
PowerShell 7 建立在现代 .NET 上的全新版本(跨平台、开源、默认 UTF-8) pwsh 或 pwsh.exe 日常 AI、开发、自动化优先使用它
Windows Terminal 一个漂亮的终端窗口,可以同时装多个 Shell wt 把 PowerShell 7 设为默认配置文件,让它成为你的主界面

简单粗暴地类比:Windows Terminal 是你的车库,PowerShell 5.1 是一辆 2016 年的老爷车,PowerShell 7 是一辆 2024 年的新车。你进车库的时候,应该自动坐上新车,而不是老爷车。

现在,我们去提新车。

第一步:先看看你现在开的是哪辆车

按 Win + R,输入 powershell,回车。在弹出的蓝色窗口里输入:

$PSVersionTable.PSVersion

如果你看到的主版本号是 5——恭喜,你就是这篇文章的目标读者。如果已经是 7——你已经是少数派了,可以把这篇文章转给还在受苦的朋友 😉

第二步:安装 PowerShell 7

三种方式,丰俭由人。推荐方式一,快且干净。

🥇 方式一:WinGet 安装(推荐)

先认识一下 WinGet——Windows 的“应用商店命令行版”

如果你用过 Linux 的 apt/yum 或者 macOS 的 Homebrew,那你马上就能理解 WinGet 是什么——它就是微软官方的 Windows 包管理器。

用它能干嘛?

  • 一行命令装软件,不用去官网找下载链接
  • 一行命令升级所有软件,不用一个一个点更新
  • 卸载干净,不留残留

Windows 11 和 Windows Server 2025 已经自带 WinGet。Windows 10(1809 及以上版本)如果提示找不到 winget,去 Microsoft Store 搜索「应用安装程序」(App Installer)装上就行。

📖 想深入了解?微软官方文档:https://learn.microsoft.com/zh-cn/windows/package-manager/winget/

开工

① 先确认 WinGet 能不能用:

winget --version

如果输出了版本号(比如 v1.8.1911),说明一切正常。如果提示“找不到”——先去 Microsoft Store 装「应用安装程序」,一分钟的事。

② 搜一下确认包名:

winget search --id Microsoft.PowerShell --exact

③ 一行命令安装:

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

WinGet 会自动下载最新版 PowerShell 7 并安装好,全程不用你操心。

建议用这种 wix(MSI)安装,装出来的路径是 C:\Program Files\PowerShell\7\pwsh.exe;MSIX 那种安装是在 C:\Program Files\WindowsApps\Microsoft.P…,某些工具可能只认 C:\Program Files\PowerShell\7\pwsh.exe。

④ 如果之前装过、要升级:

# 先看看有没有更新
winget list --id Microsoft.PowerShell --upgrade-available
# 有的话直接升
winget upgrade --id Microsoft.PowerShell

⑤ 验证安装:

关掉当前终端,重新打开,输入:

pwsh

进入 PowerShell 7 后,再执行:

$PSVersionTable.PSVersion

看到主版本号显示 7——搞定。

💡 彩蛋:WinGet 还能这么玩

装完 PowerShell 7 之后,你顺便解锁了一个超能力——以后装任何软件都可以用 WinGet:

winget search <关键词>       # 搜索软件
winget install <应用名>      # 安装
winget upgrade --all         # 一键升级所有软件
winget --help                # 看看还有什么玩法

装个 VS Code?winget install Microsoft.VisualStudioCode。装个 Git?winget install Git.Git。再也不用去官网一个一个找了。

🥈 方式二:MSI 包安装(适合企业/离线部署)

从 GitHub Releases 下载 .msi 文件,双击安装,一路 Next。

或者一条命令静默安装(适合批量部署):

msiexec.exe /package PowerShell-7.6.4-win-x64.msi /quiet ADD_PATH=1 ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1

📖 详细文档:https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell?view=powershell-7.6

🥉 方式三:其他方式(简略了解)

  • MSIX 包:直接去 Microsoft Store 搜「PowerShell」安装,适合不喜欢命令行的用户。
  • ZIP 包:下载解压即用,适合想同时保留多个版本或者 U 盘携带的场景。
  • .NET Global Tool:dotnet tool install –global PowerShell,开发者专属玩法。

普通用户选方式一就够了。

第三步:验证三件套

安装完后,一定要关掉终端重新打开,然后输入 pwsh 进入 PowerShell 7,依次检查:

# 1. 版本号——应该显示 7.x
$PSVersionTable.PSVersion

# 2. 版本类型——应该显示 Core
$PSVersionTable.PSEdition

# 3. 安装路径——应该指向 PowerShell 7 的目录
$PSHOME

如果输入 pwsh 提示找不到?排查三步走:

  1. 重启你的终端(Windows Terminal、VS Code、Cursor、AI 客户端——通通关掉重开)
  2. 在 cmd 里跑 where.exe pwsh 看看系统能不能找到
  3. 在 PowerShell 里跑 Get-Command pwsh -All 确认

大部分情况重启终端就能解决。

第四步:让 AI Agent 用上 pwsh(关键一步)

装好 PowerShell 7 只是第一步。但你的 AI Agent 不一定知道这件事。

很多 AI 编程工具(Codex、Cursor、Claude Code)在 Windows 上默认还是会去调用 powershell.exe(也就是 5.1),结果等于白装了。

要验证这一点,直接在 AI 工具里让它自查:

请执行以下命令,告诉我当前 PowerShell 的版本和可执行文件路径:
$PSVersionTable.PSVersion
(Get-Process -Id $PID).Path

如果它回复的版本还是 5.1——那就需要明明白白告诉它“用 pwsh”。

在你的项目根目录或全局配置文件(比如 Codex 的 AGENTS.md)中加入下面这段:

## Windows Shell 规则

- 当前系统已经安装 PowerShell 7。
- 所有 PowerShell 命令必须使用 `pwsh.exe` 执行。
- 不要使用旧版 `powershell.exe`。
- 执行 PowerShell 命令时,使用以下形式:
  pwsh.exe -NoLogo -NoProfile -Command "<命令>"
- 第一次执行命令前,先运行:
  pwsh.exe -NoLogo -NoProfile -Command "$PSVersionTable.PSVersion"
- 如果 PowerShell 7 不可用,停止执行并告知用户,不要自动退回 Windows PowerShell 5.1。

这一步做完,你的 AI Agent 才算真正“认识”了 PowerShell 7。

第五步:进阶优化——用 agent-skills 再上一层楼

做到这里,你的 AI Agent 已经不再“水土不服”了。但还有一块拼图可以让体验再上一个台阶。

GitHub 上有一个开源仓库叫 agent-skills,它收集了一系列可复用的 AI agent 技能配置。其中有一个 skill 叫 powershell-safe-invocation,专门针对 Windows 上 AI agent 调用 PowerShell 时的各种坑做了规约:

  • 原生命令参数传递的正确方式(别再用 cmd /c 来凑合)
  • 路径里的引号和转义处理(Windows 路径里那些空格和反斜杠终于不再让人抓狂)
  • 强制 UTF-8 编码,彻底告别乱码
  • 进程启动和退出码的规范处理
  • foreach 管道解析等 PowerShell 独有的细节

安装也很简单,以 Codex 为例:

$repo = (Get-Location).Path  # 你 clone 仓库所在的目录
$target = "$env:USERPROFILE\.codex\skills"
New-Item -ItemType Directory -Force -Path $target | Out-Null
Copy-Item -LiteralPath "$repo\skills\powershell-safe-invocation" -Destination $target -Recurse -Force

如果你用的是其他 agent,把 $target 改成对应的 skills 目录就行。

这个仓库里还有一个 bilibili-page-reader skill,能帮 AI 读取 B 站视频内容和字幕,也挺有意思的,顺手可以看看。

第六步:装上 coreutils — 让 Windows 也能说 Linux 的“方言”

到这一步,你的 Shell 环境已经升级到位了。但还有一个更深层的问题没解决——命令本身。

回想一下文章开头说的:AI 训练语料里全是 Linux/macOS 的命令。ls、grep、cat、find、sort……这些命令在 AI 的“母语”里是自带的标准词汇,但在 Windows 上,它们要么不存在,要么行为完全不一样。

好消息是,微软自己也意识到了这个问题。他们开源了一个项目叫 Coreutils for Windows,简单来说就是——把 Linux 的核心命令行工具,原汁原味移植到了 Windows 上。

它是什么?

Coreutils for Windows 基于 Rust 重写的 uutils/coreutils,打包成一个单一的多调用二进制文件。你装好之后,ls、cp、mv、rm、cat、grep、find、wc、sort、echo、tee……几十个 Linux 日常命令,直接就能在 Windows 上用,而且参数和行为跟 Linux 版一致。

这意味着什么?AI 给你的命令行指令,不用翻译了。它说 ls -la,你的 Windows 就能跑 ls -la。它说 grep -r “error” .,你的 Windows 就能跑 grep -r “error” .。这比任何 Shell 配置都更能直击要害——因为你缩小的是「命令语言」本身的差异。

怎么装?

继续用 WinGet,一行搞定:

winget install Microsoft.Coreutils

需要注意的事

毕竟是预览阶段的项目,有几个小细节要知道:

  • 需要 PowerShell 7.4+(你已经装好了),推荐 7.6+ 获得完整 ~ 路径支持。
  • 部分命令与 PowerShell 内置别名冲突(比如 ls、cp、rm 在 pwsh 里本身有别名指向 PowerShell 原生 cmdlet)。安装 coreutils 后,PATH 优先级会让 Linux 版本生效,这正是我们想要的效果。
  • 有一些纯 POSIX 概念的命令(如 chmod、chown)不会提供,因为 Windows 没有对应的权限模型,这是合理的取舍。

如果某个命令的行为跟你预期不一致,可以用 coreutils-manager 来管理:

coreutils-manager disable <命令名>   # 禁用某个工具
coreutils-manager --help             # 查看所有管理命令

最后

我们来捋一下你做了什么:

  • ✅ 把 2016 年的 Windows PowerShell 5.1 换成了现代化的 PowerShell 7
  • ✅ 配置了 AI Agent 让它强制使用 pwsh
  • ✅ 装上了 agent-skills 规范 AI 对 PowerShell 的调用方式
  • ✅ 装上了 coreutils 让 Windows 原生支持 Linux 命令

就这四件事,花你大概 15 分钟。换来的是什么?

你的 AI Agent 在 Windows 上也能拥有 Mac 般丝滑的操作体验。不再有莫名其妙的编码报错,不再有命令找不到的尴尬,不再有 token 平白无故消耗在兼容性问题上。

行了,别再眼馋 Mac 用户的 AI 体验了。动手升级吧 😎


本文原发于知乎,作者「滴滴点到」,经作者授权整理收录于 AI SI Daily。

同类推荐