• 请不要在回答技术问题时复制粘贴 AI 生成的内容
knowckx
V2EX  ›  程序员

PowerShell 和 Codex 在打架?可以试试这份提示词

  •  1
     
  •   knowckx · 2 days ago · 3459 views

    今天花时间写了篇 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 的比例非常高。所以当你只说“执行一个命令”时,它很容易下意识写出 grepsedcat&& 这一套 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 才是稳定的多行文本方案。
    • 处理语句块管道foreachif 这类语句块不能直接当作普通管道输入,提前写进规则后,Codex 不会反复生成同一种错误写法。
    • 处理 rg 通配路径:先展开真实目录再搜索,比把 * 直接交给命令更符合 PowerShell 和 Windows 的路径行为。

    我的经验是,提示词不需要写得特别长,但要把最容易出错、而且会反复出错的地方说清楚。规则稳定下来之后,Codex 执行命令的成功率会明显提高,来回打架解释“这不是 Bash ,请改成 PowerShell”的次数也少很多。

    总结

    Codex 下 PowerShell 执行时打架的原因,就是因为它在猜你的 shell 。
    把环境写清楚,把容易错的语法提前约束好,Windows 下的开发体验会立刻稳定提升一截。


    原创声明: 本文首发于个人博客 原文地址 欢迎各位大佬交流

    30 replies    2026-07-20 17:07:01 +08:00
    bytewalk
        1
    bytewalk  
       2 days ago
    收藏了,现在用的 mac ,留着一个月后换工作时用
    isAK47
        2
    isAK47  
       2 days ago
    谢谢,已经设置了,先用用看
    815377546
        3
    815377546  
       2 days ago
    感谢分享,每次看 ai 在写命令报错都很头疼
    knowckx
        4
    knowckx  
    OP
       2 days ago
    @bytewalk 习惯了 mac 的话 没必要换 windows 需要折腾不少东西
    815377546
        5
    815377546  
       2 days ago
    @815377546 #3 话说,我 win 里的终端(命令提示符),就是 windows terminal 。。
    knowckx
        6
    knowckx  
    OP
       2 days ago
    @isAK47 嗯,有问题可以反馈
    knowckx
        7
    knowckx  
    OP
       2 days ago
    @815377546 终端是一个壳 调用的 shell 走 pwsh7
    bytewalk
        8
    bytewalk  
       2 days ago
    @knowckx #4 没办法,新公司做设备软件的,mac 估计用不起来😐
    shekou
        9
    shekou  
       2 days ago
    感谢分享!
    lujiaosama
        10
    lujiaosama  
       2 days ago
    我直接让 AI 帮我从头到尾撸了个部署环境包了。包括安装 POWERSHELL7,RG,OHMYPOSH,换字体,Z 插件,全局 AGENTS.MD 里写入各种约束。
    HENQIGUAI
        11
    HENQIGUAI  
       2 days ago
    感谢分享,已严肃加入 Agents.md
    halibut735
        12
    halibut735  
       2 days ago
    为啥不用 wsl
    knowckx
        13
    knowckx  
    OP
       2 days ago
    @bytewalk 欢迎加入 windows 环境的开发!
    @lujiaosama 你是指自己封一个安装包?

    @halibut735 可以上 wsl 但是需要确定带来的收益大于折腾的成本
    @HENQIGUAI 有问题欢迎分享
    reiji
        14
    reiji  
       2 days ago   ❤️ 1
    国产的 IDE 在这些兼容上面下了很多力气,pwsh5 真的是万恶之源
    lujiaosama
        15
    lujiaosama  
       2 days ago
    @knowckx 类似 SKILL 的工程,打包好各种离线的资源和脚本,包括 WindowsTerminal+PowerShell7+WINGET+OhMyPosh+Ripgrep+NerdFonts+插件( zoxide,posh-git )+Codex 全局 AGENTS.md 。让 CODEX 帮忙安装。
    lisxour
        16
    lisxour  
       2 days ago   ❤️ 1
    @halibut735 wsl 一样让人绷不住

    admirez
        17
    admirez  
       2 days ago
    windows 下用 yolo 模式吗
    admirez
        18
    admirez  
       2 days ago
    另外 5.6 sol 已经自己能搞定了,我只是在 agents.md 告诉他我用 pw7+win11



    提问:多行 py 你是用 bash heredoc 吗


    • 不是。PowerShell 7 下,多行 Python 内联脚本使用 Here-String:

    @'
    print("Hello")
    '@ | python -B -

    不会使用 Bash 风格的 python - <<'PY'。
    xJogger
        19
    xJogger  
       2 days ago via Android
    我比较直接,先用了一个月,看他跟 pw 搏斗了一个月,之后让他总结搏斗了啥,写一个约束之后别再踩一样的坑。
    shmilypeter
        20
    shmilypeter  
       2 days ago
    在 windows 上用 wsl 就好了,不用跟 powershell 打架。
    knowckx
        21
    knowckx  
    OP
       2 days ago
    @reiji pwsh5 还有编码问题 他默认竟然是 utf-8 bom 哈哈
    @lujiaosama 你动手能力很强!
    @admirez 对,是这个方向。我的环境约束主要是避免生成 Bash heredoc

    @xJogger 我也是这样积累的 每次发现执行出错我就让他回溯具体的执行过程
    knowckx
        22
    knowckx  
    OP
       2 days ago
    @shmilypeter wsl 也是不错的选择
    liansishen
        23
    liansishen  
       1 day ago
    已经添加上了,等下次 codex 重置之后试试
    RangerWolf
        24
    RangerWolf  
       1 day ago
    我们团队共享的 skill 里面的脚本,都是使用 bash
    毕竟有 mac 也有 win 的开发者

    作为 Windows 用户的我,发现只能使用 git bash 顶着。。。
    虽然我加了一些提示词,但是经常发现 codex 还是默认使用 powershell ,但是 cursor 使用 git bash 就很顺滑
    也不知道里面有什么差别
    kivensun
        25
    kivensun  
       1 day ago
    谢谢楼主!学习下,换下 pw7 试试
    rrrieper
        26
    rrrieper  
       1 day ago
    如果你只用 gpt5.6 ,其实没啥必要改 agent.md 了,装个 powershell 7 就行。
    我这段时间使用下来,powershell 的语法错误率实测不足 0.5%,以后只会越来越低,还是省点 token 吧。
    xuejianxianzun
        27
    xuejianxianzun  
       1 day ago
    已添加
    LimaEcho
        28
    LimaEcho  
       1 day ago
    感谢,试一下
    Kimipoker
        29
    Kimipoker  
       12h 35m ago
    刚才补丁工具在 Windows 绝对路径的沙箱封装上被拒绝了,尚未产生修改;我改用仓库相对路径继续应用同一组变更。 上面这个问题有人知道为什么吗? 最近才出现的 之前都没问题
    ca2oh4
        30
    ca2oh4  
       6h 39m ago
    codex 在 中文的 windwos 环境 + 中文的文档 + 中文代码注释,经常搞出些莫名其妙的乱码
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2638 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 15:46 · PVG 23:46 · LAX 08:46 · JFK 11:46
    ♥ Do have faith in what you're doing.