在 Windows PowerShell 里运行 Codex 报错,很多时候不是 Codex 本身坏了,而是 PowerShell、Node、路径、执行策略、网络代理或命令传参方式出了问题。
尤其是从 macOS、Linux 教程复制命令到 Windows 时,很容易把 Bash 写法原样贴进 PowerShell。结果看起来像 Codex 报错,实际是命令根本没有按预期执行。
这篇按排查型思路整理:先确认环境,再处理安装、登录、路径、执行策略、参数转义、中文编码和网络问题。
快速排查清单
遇到 Windows PowerShell 运行 Codex 报错,可以先跑下面几条:
|
|
如果 codex --version 能正常输出,说明 Codex 命令至少已经能被系统找到。接下来再看是登录、项目目录、权限还是网络问题。
如果第一步就报错,优先按这个顺序查:
- Node.js 是否安装。
- npm 全局 bin 目录是否在
PATH里。 codex命令是否存在。- 当前 PowerShell 是 Windows PowerShell 5.1 还是 PowerShell 7。
- 是否把 Bash 命令直接复制到了 PowerShell。
报错一:codex 不是内部或外部命令
常见提示类似:
|
|
这通常表示系统找不到 codex 可执行文件。
先检查:
|
|
如果 Node 或 npm 不存在,先安装 Node.js LTS。装完后关闭当前 PowerShell,重新打开一个新窗口,再检查版本。
如果 npm 存在,但 codex 不存在,通常需要重新安装 Codex CLI:
|
|
安装完成后再运行:
|
|
如果安装成功但仍然找不到命令,多半是 npm 全局目录没有进入 PATH。可以查看:
|
|
然后确认对应目录是否在环境变量 Path 中。改完环境变量后,需要重新打开终端。
报错二:npm install -g 失败
安装 Codex 时,Windows 上常见失败原因有三个:
- Node.js 版本太旧;
- npm 全局目录权限不够;
- 公司网络、代理或证书拦截。
先确认版本:
|
|
如果 Node 版本明显过旧,建议升级到当前 LTS 版本,再重新安装。
如果是权限问题,不要第一反应就用管理员终端硬装。更稳妥的做法是让 npm 全局包安装到用户目录,或者使用 Node 版本管理工具。临时用管理员 PowerShell 可以解决一部分问题,但也容易造成后续权限混乱。
如果是网络问题,npm 通常会出现超时、证书、代理相关提示。可以先测试:
|
|
公司网络下,如果需要代理,要按公司的代理规则配置 npm;如果是证书拦截,不要随便关闭 SSL 校验,先找内部开发环境说明。
报错三:运行脚本被 ExecutionPolicy 拦截
有些教程会让你运行 .ps1 脚本,PowerShell 可能提示:
|
|
这是 PowerShell 执行策略拦截,不是 Codex 的模型问题。
如果你确认脚本来源可信,可以对当前用户放宽策略:
|
|
也可以只针对这一次运行:
|
|
但不要把 -ExecutionPolicy Bypass 当万能前缀到处加。它只应该用于你明确知道脚本来源、内容和风险的场景。
如果只是运行 codex 命令,通常不需要改执行策略。
报错四:路径里有空格或中文导致命令失败
Windows 路径常见这种形式:
|
|
如果把命令拼成一整串,很容易把路径拆坏。PowerShell 里更稳的做法是:路径单独放进变量,用 & 调用程序,用数组传参。
不要这样写:
|
|
建议这样写:
|
|
如果要调用一个路径里的可执行文件:
|
|
关键点是:不要手工拼接一条很长的命令字符串。每个参数应该作为独立项传给 PowerShell。
报错五:从 Bash 教程复制命令到 PowerShell
很多 Codex、Agent、CLI 工具教程默认写给 macOS 或 Linux。常见 Bash 写法包括:
|
|
这些不能直接照搬到 PowerShell。
PowerShell 设置环境变量应该写:
|
|
只对当前窗口有效。想长期保存,可以用系统环境变量界面,或者用:
|
|
保存后重新打开 PowerShell。
如果教程里是 .sh 安装脚本,Windows PowerShell 不能直接运行。你需要找项目是否提供 Windows 安装方式,或者在 WSL、Git Bash、PowerShell 7 中按对应说明处理。
报错六:引号、反斜杠和 JSON 参数被 PowerShell 改坏
PowerShell 不是 Bash。它的引号、反引号、变量展开和数组传参规则都不同。
如果命令里包含 JSON、正则、多层引号或很长提示词,不建议写成一行:
|
|
更稳的做法是把复杂内容放进文件:
|
|
然后让工具读取文件,或者用更简单的参数形式。
如果要在 PowerShell 里调用原生命令,优先使用数组:
|
|
这样比手写转义更少出错。
报错七:中文乱码或文件被写坏
Windows 上最容易让人误判的是编码问题。PowerShell 终端显示乱码,不一定代表文件真的坏了;但如果用错误方式写入中文文件,确实可能把内容写成问号或乱码。
排查时可以用 Python 读取文件:
|
|
如果只是终端显示问题,文件本身可能没事。
如果需要让 Codex 或脚本修改中文 Markdown,建议明确告诉它:
- 不要用
Set-Content、Out-File随手写中文; - 写文件时指定 UTF-8;
- 修改后用 UTF-8 读取验证;
- 不要把 PowerShell 控制台乱码当成文件损坏证据。
这类问题在 Hugo、Markdown、中文路径和多语言文章里尤其常见。
报错八:Codex 登录或 API Key 不生效
Codex 的认证方式可能和你当前使用入口有关。有的场景使用 ChatGPT 登录,有的场景使用 API key,有的插件会沿用本机 Codex 配置。
排查时先确认你到底想用哪种方式:
- Codex App / CLI 登录;
- API key;
- 插件调用本机 Codex;
- 通过其他工具间接调用 Codex。
如果你设置了环境变量,先检查当前窗口是否能读到:
|
|
如果为空,说明当前 PowerShell 没拿到这个变量。重新设置,或者关闭终端后重开。
如果你刚刚修改了系统环境变量,但旧窗口里仍然没有变化,这是正常的。PowerShell 进程启动时才读取环境变量,新值不会自动注入已经打开的窗口。
报错九:网络代理、证书或公司防火墙拦截
如果 Codex 能启动,但请求一直失败,常见原因是网络:
- 公司代理;
- TLS 证书检查;
- DNS 解析;
- 安全软件拦截;
- 终端没有继承系统代理;
- npm 和 Codex 使用的代理配置不一致。
可以先做基础网络检查:
|
|
如果 DNS 或 443 端口都不通,先处理网络,不要继续改 Codex 配置。
如果浏览器能访问,但 PowerShell 不行,通常要检查代理配置。公司设备上不要随便绕过代理或关闭证书校验,优先看组织提供的开发环境设置。
报错十:Codex 调用命令后判断成功失败不准
如果你让 Codex 在 PowerShell 里跑命令,它可能会混淆两类错误:
- 原生命令的退出码;
- PowerShell cmdlet 的异常。
外部程序要看 $LASTEXITCODE:
|
|
PowerShell cmdlet 则应该使用终止错误:
|
|
不要用 $LASTEXITCODE 判断 Copy-Item、Move-Item、Remove-Item 这类 cmdlet 是否成功。
建议优先使用 PowerShell 7
Windows 自带的 powershell.exe 通常是 Windows PowerShell 5.1。PowerShell 7 的命令是:
|
|
两者不是一回事。
检查当前版本:
|
|
如果你经常在 Windows 上运行 Codex、Node、Git、Python、Hugo、npm 等开发工具,建议安装并使用 PowerShell 7。它对现代命令行工具更友好,原生命令传参也更接近开发者预期。
但注意:安装 PowerShell 7 不会自动替换 powershell.exe。你的 VS Code、Windows Terminal、脚本和任务配置里,可能仍然在调用 5.1。
一份更稳的 Codex 启动模板
如果你经常在固定项目里运行 Codex,可以写一个简单的启动脚本,例如 start-codex.ps1:
|
|
如果要传参数,用数组:
|
|
这样做的好处是:路径、参数、错误处理都更清楚。后面出问题,也更容易定位是哪一步失败。
排查顺序建议
最后给一个实用顺序:
node -v和npm -v是否正常。where.exe codex是否能找到 Codex。codex --version是否能运行。- 当前 PowerShell 是 5.1 还是 7。
- 项目路径是否包含空格、中文或特殊符号。
- 是否复制了 Bash 命令。
- 是否存在执行策略拦截。
- 登录方式或 API key 是否在当前窗口生效。
- 网络、代理和证书是否正常。
- 是否把 PowerShell cmdlet 和外部程序的错误判断混在一起。
小结
Windows PowerShell 运行 Codex 报错,通常可以分成四类:安装环境问题、PowerShell 语法问题、路径和编码问题、网络和认证问题。
排查时不要一上来就重装 Codex。先确认 node、npm、codex 是否可见,再看 PowerShell 版本、路径、执行策略、环境变量和网络。写命令时少拼接字符串,多用数组传参、-LiteralPath、UTF-8 验证和明确的错误处理。
这样处理,Codex 在 Windows 上会稳定很多,也更容易把真正的 Codex 问题和 PowerShell 调用问题分开。