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

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

  •  1
     
  •   knowckx · 16h 55m ago · 1998 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 下的开发体验会立刻稳定提升一截。


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

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

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

    admirez
        17
    admirez  
       12h 41m ago
    windows 下用 yolo 模式吗
    admirez
        18
    admirez  
       12h 38m 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  
       10h 2m ago via Android
    我比较直接,先用了一个月,看他跟 pw 搏斗了一个月,之后让他总结搏斗了啥,写一个约束之后别再踩一样的坑。
    shmilypeter
        20
    shmilypeter  
       9h 34m ago
    在 windows 上用 wsl 就好了,不用跟 powershell 打架。
    knowckx
        21
    knowckx  
    OP
       9h 18m ago
    @reiji pwsh5 还有编码问题 他默认竟然是 utf-8 bom 哈哈
    @lujiaosama 你动手能力很强!
    @admirez 对,是这个方向。我的环境约束主要是避免生成 Bash heredoc

    @xJogger 我也是这样积累的 每次发现执行出错我就让他回溯具体的执行过程
    knowckx
        22
    knowckx  
    OP
       9h 18m ago
    @shmilypeter wsl 也是不错的选择
    liansishen
        23
    liansishen  
       4h 9m ago
    已经添加上了,等下次 codex 重置之后试试
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   972 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 22:40 · PVG 06:40 · LAX 15:40 · JFK 18:40
    ♥ Do have faith in what you're doing.