同样是 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
🥉 方式三:其他方式(简略了解)
- 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 提示找不到?排查三步走:
- 重启你的终端(Windows Terminal、VS Code、Cursor、AI 客户端——通通关掉重开)
- 在 cmd 里跑 where.exe pwsh 看看系统能不能找到
- 在 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。
同类推荐
Cline:开源 AI 编程智能体详解、核心功能与上手指南
全面介绍开源 AI 编程智能体 Cline,它支持 IDE、命令行与桌面端,能够跨多文件协调修改代码,并自主执行终端工作流以解决开发问题。
Aider:终端 AI 结对编程工具与快速上手指南
介绍开源终端工具 Aider,支持终端内 AI 结对编程、代码库全景构建、Git 自动集成与多模型代码编辑。
NotebookLM 指南:认识这款 AI 研究助手与使用方法
了解 NotebookLM 作为 AI 研究助手的工作原理,探索其基于来源资料的特色功能,并掌握使用 Google 账号快速上手的方法。