今天花时间写了篇 codex 下使用 PowerShell 的文章 在 V2EX 上也发一份
背景
最近半年一直 Windows 下使用 Codex 开发项目,逐渐把开发环境打造得更接近 Linux 下的开发体验。最近看到很多人反馈 PowerShell 和 Codex 打架的情况,因为这问题我之前就解决了,所以想分享下我的方案。
现在这套环境谈不上多复杂,主要有两个重点:
先把终端环境统一,再用提示词把大模型的命令习惯掰过来。
先安装 pwsh 7 和 Windows Terminal
如果你还在使用系统自带的 Windows PowerShell 5.1 ,我建议先换成现代 shell:PowerShell 7 ( pwsh )。
至于 PowerShell 5.1 和 PowerShell 7 的区别,可以找 AI 给你解释一下,但是结论不变:
现代 Windows 开发环境最好统一到 pwsh 7 。
可以直接用 winget安装:
winget install --id Microsoft.PowerShell --source winget
也可以从 PowerShell 官方安装页面 下载 MSI 安装包手动安装。
安装后验证,在命令行中输出版本号:
PS C:\Users\AAA> pwsh -v
PowerShell 7.x
原生的 PowerShell 界面很丑,所以必安装另一个 Windows 神器 Windows Terminal
它的价值不只是好看,而是把 pwsh、Git Bash 、远程 SSH 等环境放在同一个窗口里管理,支持标签页、分屏、统一的字体和编码设置。平时一边让 Codex 在一个窗口里执行命令,一边查看日志或运行服务,效率会高很多。
winget install --id Microsoft.WindowsTerminal --source winget
也可以通过 Windows Terminal 官方安装页面 进入 GitHub Releases ,下载对应安装包手动安装。
安装完成后,把 Windows Terminal 的默认配置文件设为 PowerShell 7。这样打开后默认就是 pwsh7 的环境。所有提示词、命令和排错过程,都应该建立在同一个 shell 上。
安装 rg
rg 就是 ripgrep,一个非常适合在代码仓库里搜索文本的命令行工具,速度快,默认会遵守 .gitignore,输出也比 PowerShell 原生搜索更适合直接交给 AI 阅读。
但要注意,rg 并不是 Windows 原生命令。需要提前安装一下。
# 使用 winget 安装
winget install BurntSushi.ripgrep.MSVC
# 或者使用 Scoop 进行安装
scoop install ripgrep
当然也可以从 ripgrep 官方下载页面 手动下载 Windows 安装包。
安装后记得重新打开 Windows Terminal ,否则当前终端可能还没有刷新 PATH 。
安装完成后,可以用下面的命令确认是否生效:
rg --version
加提示词约束
把终端环境换好只是第一步。真正影响体验的,是要明确告诉 Codex:当前项目使用的是 PowerShell ,不是 Bash 。
大模型在训练时接触过的编程语料、命令示例和工具调用记录里,Linux 、Bash 的比例非常高。所以当你只说“执行一个命令”时,它很容易下意识写出 grep、sed、cat 或 && 这一套 Bash 习惯。命令本身可能没错,但放到 pwsh 里就会报错,或者产生和预期不同的结果。
这套提示词约束已经让我在 Windows 环境下顺畅工作了几个月,现在直接分享在下面:
## Windows 约束
当前环境是 Windows 10 / pwsh7
- 默认禁止使用 Bash 语法,除非确定此 shell 处在 Linux 环境
- 不要使用 Bash 引号/转义习惯,在 PowerShell 命令里,复杂正则优先用单引号包裹。
- 如果正则本身同时包含单引号和双引号,优先拆成多个简单 rg 命令。
- 执行多行 Python 禁止使用 Bash heredoc ;改用 PowerShell here-string | python -
- pwsh 中,语句块表达式(如 `foreach`、`if`)不能直接作为管道输入。 需要先使用 `$()` / `@()` 包裹,或先赋值给变量。 普通命令输出可直接进入管道,无需额外包裹。
- PowerShell 使用 `rg` 时,通配目录必须先用 `Get-ChildItem -Filter` 展开为真实路径,禁止直接把含 `*` 的搜索路径传给 `rg`。
- 可以直接把这段提示词复制到
C:/Users/<userName>/.codex/AGENTS.md - 我这边用的是
Windows 10 LTSC, 你可以换成你的系统
这套提示词不是为了限制 Codex ,而是为了减少它在 shell 之间切换时的冲突。特别是引号、管道、正则和多行脚本,这几类问题经常会打架,一旦出错,让 AI 自动修正会浪费很多时间
为什么这几条约束值得保留
- 明确 shell:让 Codex 从一开始就知道命令要交给
pwsh,避免默认生成 Bash 命令。 - 约束引号和转义:PowerShell 的字符串、正则和变量展开规则不同,先规定写法,能少踩一轮转义的坑。
- 替代 heredoc:Windows 下没有 Bash heredoc ,PowerShell here-string 才是稳定的多行文本方案。
- 处理语句块管道:
foreach、if这类语句块不能直接当作普通管道输入,提前写进规则后,Codex 不会反复生成同一种错误写法。 - 处理
rg通配路径:先展开真实目录再搜索,比把*直接交给命令更符合 PowerShell 和 Windows 的路径行为。
我的经验是,提示词不需要写得特别长,但要把最容易出错、而且会反复出错的地方说清楚。规则稳定下来之后,Codex 执行命令的成功率会明显提高,来回打架解释“这不是 Bash ,请改成 PowerShell”的次数也少很多。
总结
Codex 下 PowerShell 执行时打架的原因,就是因为它在猜你的 shell 。
把环境写清楚,把容易错的语法提前约束好,Windows 下的开发体验会立刻稳定提升一截。
原创声明: 本文首发于个人博客 原文地址 欢迎各位大佬交流

