Windows+codex开发必看:Codex如何默认使用PowerShell 7解决默认调用 PowerShell 5 导致中文、引号频繁出错的问题
前言
最近在 Windows 上使用 Codex 做本地开发时,经常遇到一些很烦的问题:
- 中文路径或中文输出异常
- 命令里有引号、JSON、正则时容易解析失败
- 一些 PowerShell 7 支持的语法在 PowerShell 5.1 里不可用
- 明明命令本身没问题,但 Codex 调用时表现不稳定
导致codex任务效率很低且白白浪费token。
排查后发现,Codex 本地 shell 命令默认进入的是系统自带的 Windows PowerShell 5.1:
Get-Process -Id $PID | Select-Object Id,ProcessName,Path
$PSVersionTable.PSVersion
输出类似:
ProcessName: powershell
Path: C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
PSVersion: 5.1.x
解决思路很直接:安装 PowerShell 7,并让 Codex 后续默认能找到 pwsh.exe。
下载安装 PowerShell 7
官方推荐方式可以使用 WinGet 或 MSI 安装包。Microsoft 官方文档提供了 Windows 安装说明,也列出了 MSI、MSIX、ZIP 等安装方式。
WinGet 安装:
winget install --id Microsoft.PowerShell --source winget
如果想安装 MSI 版本:
winget install --id Microsoft.PowerShell --source winget --installer-type wix
也可以从官方 GitHub Release 下载 MSI 安装包,然后双击安装。
个人比较推荐去官方网页直接下载MSI包:https://learn.microsoft.com/zh-cn/powershell/scripting/install/install-powershell-on-windows?view=powershell-7.6#msi

安装时如果看到类似 Add PowerShell to PATH 的选项,建议勾选。MSI 安装也支持 ADD_PATH=1 参数,用来把 PowerShell 加入 Windows PATH 环境变量。
如果你使用自定义安装目录
我的环境里 PowerShell 7 放在:
E:\PowerShell7\7\pwsh.exe
这种情况下,需要把目录加入系统 Path:
E:\PowerShell7\7\
注意加入的是文件夹,不是 pwsh.exe 文件本身。
操作路径:
系统属性 -> 高级 -> 环境变量 -> 系统变量 -> Path -> 编辑 -> 新建
填入:
E:\PowerShell7\7\
如下图所示,一定要保证PowerShell7的路径在PowerShell5的上面! 这是codex优先调用PowerShell7的关键一步。因为默认情况下PowerShell7安装时间肯定更晚,即使加入系统 Path后位置也在PowerShell5的下面,此时codex还是默认使用PowerShell5,无法自动调用PowerShell7。

重启 Codex 验证是否生效
这一点很重要。
修改系统 Path 后,已经运行中的 Codex 进程通常不会自动拿到新的环境变量。需要完整退出并重新打开 Codex。
重启前可能出现:
pwsh
报错:
pwsh : The term 'pwsh' is not recognized
重启 Codex 后再验证。
在 Codex 里执行:
Get-Process -Id $PID | Select-Object Id,ProcessName,Path
$PSVersionTable.PSVersion
$PSHOME
期望看到:
ProcessName: pwsh
Path: E:\PowerShell7\7\pwsh.exe
PSVersion: 7.x
再执行:
Get-Command powershell,pwsh -ErrorAction SilentlyContinue |
Select-Object Name,CommandType,Source,Path |
Format-List
正常情况下会看到:
powershell.exe -> C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
pwsh.exe -> E:\PowerShell7\7\pwsh.exe
这个结果说明:
pwsh已经可以调用 PowerShell 7powershell仍然是系统自带 PowerShell 5.1- Codex 当前默认 shell 已经进入 PowerShell 7
不建议依赖 shell_path 配置
我也尝试过在 Codex 配置里写:
shell_path = "E:\\PowerShell7\\7\\pwsh.exe"
配置文件位置一般是:
C:\Users\<用户名>\.codex\config.toml
但实测这个配置没有让当前本地命令通道稳定切到 PowerShell 7。OpenAI 官方 Codex 配置参考里也没有把 shell_path 列为公开配置项。
所以更可靠的做法是:
- 安装 PowerShell 7
- 把
pwsh.exe所在目录加入系统Path,且优先于Powershell 5 - 重启 Codex
- 用命令确认当前进程确实是
pwsh
常见问题
1. 已经加了 Path,为什么 Codex 还是找不到 pwsh?
通常是 Codex 还没有重启。
可以先检查系统 Path:
[Environment]::GetEnvironmentVariable('Path','Machine') -split ';' |
Where-Object { $_ -match 'PowerShell' }
也可以检查当前进程 Path:
$env:Path -split ';' |
Where-Object { $_ -match 'PowerShell' }
如果系统 Path 有 PowerShell 7,但当前进程 Path 没有,重启 Codex 即可。
2. PSModulePath 有用吗?
没有。启动 pwsh.exe 看的是 Path,不是 PSModulePath。
PSModulePath 用来搜索 PowerShell 模块,比如 Import-Module。它不会决定启动 PowerShell 5 还是 PowerShell 7。
3. 以后还会遇到中文或引号问题吗?
会明显减少,但不能保证完全消失。但目前我自己使用下来没有再出现过codex主动说“又被Powershell咬了一口”的情况···,实际查看运行日志基本全部调用pwsh命令且均执行成功。
PowerShell 7 对 UTF-8、现代命令行行为、跨平台兼容性更好,中文输出和脚本兼容性会稳定很多。
但复杂命令仍可能经过多层解析:
Codex -> PowerShell 7 -> 外部程序 -> 程序自己的参数解析
下面这些场景仍要注意:
- JSON 参数
- 正则表达式
- 中文路径
- 多层嵌套引号
node -epython -ccmd /cbash -lc
遇到复杂命令时,建议使用脚本文件、参数数组或 here-string,减少一行命令里的引号嵌套。
最终效果
配置完成后,在 Codex 中执行本地 shell 命令,默认环境可以变成:
PowerShell 7.x
E:\PowerShell7\7\pwsh.exe
这能明显降低 Windows PowerShell 5.1 带来的编码、中文路径、引号解析和语法兼容问题。
参考资料
- Microsoft PowerShell 7 Windows 安装文档:https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows
- PowerShell 环境变量说明:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_provider
- PSModulePath 说明:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_psmodulepath
- Codex 配置基础:https://developers.openai.com/codex/config-basic
- Codex 配置参考:https://developers.openai.com/codex/config-reference
更多推荐



所有评论(0)