1. Windows 更新 Codex 后 PowerShell 找不到 codex.exe 的现场还原Windows 上更新 Codex 之后PowerShell 里敲codex直接报找不到codex.exe这个问题的本质不是 Codex 装坏了而是你终端里那条命令入口还指着旧版本目录。Codex 在 Windows 上的安装路径通常带版本号或哈希目录比如%LOCALAPPDATA%\OpenAI\Codex\bin\某串标识\codex.exe每次更新后这串标识会变旧路径自然失效。PowerShell 的Set-Alias或$PROFILE里写死的路径就成了“过期地图”命令当然找不到目标。这个场景适合三类人一是刚在 Windows 上更新完 Codex、准备继续用命令行跑任务的开发者二是把 Codex 接进 TaoToken 做模型调用、需要终端稳定识别codex命令的人三是习惯用 PowerShell 而不是 CMD、又不想每次手动敲全路径的普通用户。核心检索词就是 Windows、PowerShell、codex.exe、Codex、Set-Alias这几个词贯穿全文。先说清楚 Codex 是什么、能做什么。Codex 是 OpenAI 推出的命令行编码代理工具可以在终端里读代码、改文件、跑命令适合把重复的编码任务交给它。它本身是一个 CLI 程序Windows 上以codex.exe形式存在。你更新它之后安装器会把新版本放到新的目录但不会自动帮你改 PowerShell 里的别名或 PATH。于是出现一个很典型的现象where.exe codex可能什么都找不到或者找到的是旧路径codex --version报The term codex is not recognized。我先把排查顺序理清楚这样你不用瞎试。第一步确认新版codex.exe到底在哪第二步看当前 PowerShell 的 PATH 和别名指向哪第三步用Set-Alias或函数把入口改到新路径第四步写进$PROFILE固化第五步验证codex --version和实际调用。整个过程不需要重装 Codex也不需要改系统环境变量改的是 PowerShell 这一层的命令解析。这里有个容易踩的坑很多人第一反应是去“系统属性 → 环境变量”里改 PATH但 Codex 更新后的目录名带随机串你手动加一次下次更新又失效。更稳的做法是用 PowerShell 函数动态查找最新目录而不是写死路径。这也是后面Set-Alias方案要解决的核心问题。另外要区分两个概念Set-Alias只能把别名指向一个已存在的命令或可执行文件路径它不能执行“查找最新目录”这种逻辑而function可以。所以真正能扛住 Codex 频繁更新的写法是用函数包一层Get-ChildItem排序取最新再用调用。excerpt 里给的正是这个思路我会把它拆得更细并补上 PATH 检查、报错对照和 TaoToken 接入的配置。如果你同时用 TaoToken 来统一管理模型调用那终端里codex命令能不能稳定跑起来就更关键了因为 Codex 的配置里要填 Base URL、API Key 和 Model ID命令入口不稳定后面接什么都白搭。所以这篇先把“命令找得到”这件事彻底解决再谈接入。2. TaoToken 前置准备Base URL、API Key 与 Model ID 三件套在动手改 PowerShell 之前先把 TaoToken 这边的三件套准备好因为后面验证codex命令时你要让它真正能调用模型而不是只打印个版本号。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 注意 API 这个地址不加 UTM 参数配置里填的就是它。三件套具体是Base URL、API Key、Model ID。Base URL 填https://taotoken.net/apiAPI Key 去控制台生成入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 生成后复制保存它只显示一次Model ID 根据你要用的模型填比如 Claude 系列或 GPT 系列的对应标识具体以文档为准文档入口 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。API Keys 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 方便你后续轮换。为什么要在 Codex 场景里提 TaoToken因为 Codex 作为编码代理底层要调模型。如果你用 TaoToken 做统一入口Codex 的配置里就要写清楚 Base URL、Key、Model ID 这三项。而 Codex 读取配置的方式在 Windows 上常见的是auth.json或环境变量。这里要提醒Codex 的auth.json路径通常在用户目录下的.codex文件夹里比如%USERPROFILE%\.codex\auth.json。如果你用的是 Codex 的 OAuth 登录方式那它走的是另一套鉴权和 API Key 模式不同别混用。我建议的顺序是先在 TaoToken 控制台把 Key 生成好Model ID 确认好再回到 PowerShell 修codex命令入口。这样等你codex --version通过之后直接就能跑一次真实请求验证。如果你还没决定用哪个模型可以先到模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 试一下确认模型可用再写进配置。对于长期在 Windows 上做编码、跑 Agent 任务的人可以考虑 Coding Plan入口 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 它更适合持续性的编码调用场景。但这一步不急先把命令入口修好。需要强调一点TaoToken 在这里的角色是模型调用的统一入口不是让你绕过什么也不是替代你的编辑器。你该用 VS Code 还是用 VS Code该用 Codex 还是用 CodexTaoToken 只是把 Base URL 和 Key 管理集中起来。配置时把 Base URL 写成https://taotoken.net/api不要多加斜杠或路径否则容易出现 404 或 401。如果你之前配过 Claude Code 或 Codex 的 Anthropic 兼容模式注意 Base URL 的写法要和文档一致。Claude Code 相关入口在 https://taotoken.net/claudecode?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 里面有针对 Anthropic 协议的说明。Codex 这边如果走 OpenAI 兼容协议Base URL 同样是https://taotoken.net/apiModel ID 按文档填。准备好这三件套之后我们进入 PowerShell 的实际操作。记住先修命令入口再填配置最后验证请求。顺序反了的话你会分不清是命令找不到还是 Key 填错了。3. 可复制配置PATH 检查、Set-Alias 与 $PROFILE 固化这一节是全文的核心给你可以直接复制的命令和配置片段。先做 PATH 检查确认当前 PowerShell 能不能找到codex。打开 PowerShell执行where.exe codex如果返回空或者返回一个旧路径说明命令入口有问题。接着看当前会话里有没有别名Get-Alias codex如果报Cannot find alias说明别名没定义。再看$PROFILE里写了什么notepad $PROFILE如果提示文件不存在说明你还没建过配置文件这很正常。可以用下面命令创建if (-not (Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }然后定位新版codex.exe的真实路径。Codex 更新后一般放在%LOCALAPPDATA%\OpenAI\Codex\bin\下面带一层随机目录。用这条命令列出所有候选并按时间排序Get-ChildItem $env:LOCALAPPDATA\OpenAI\Codex\bin\*\codex.exe -File | Sort-Object LastWriteTime -Descending | Select-Object -First 5 FullName, LastWriteTime你会看到最新的那个codex.exe路径。确认它能跑 这里替换成上面输出的完整路径\codex.exe --version能打印版本号说明新版可执行文件没问题问题只在命令入口。接下来把入口改成动态查找。打开$PROFILEnotepad $PROFILE删掉里面旧的Set-Alias codex ...那一行替换成下面这个函数function codex { $exe Get-ChildItem $env:LOCALAPPDATA\OpenAI\Codex\bin\*\codex.exe -File | Sort-Object LastWriteTime -Descending | Select-Object -First 1 if (-not $exe) { Write-Error 未找到 codex.exe请确认 Codex 已安装 return } $exe.FullName args }保存后重新加载配置. $PROFILE再验证codex --version这次应该能正常输出版本号。这个函数的好处是Codex 下次更新换了目录它自动取最新的那个codex.exe你不用再改路径。如果你更喜欢用Set-Alias也可以写成先解析路径再设别名但Set-Alias本身不支持动态查找所以更推荐函数写法。如果你确实想保留Set-Alias的语义可以这样组合$codexExe (Get-ChildItem $env:LOCALAPPDATA\OpenAI\Codex\bin\*\codex.exe -File | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName Set-Alias -Name codex -Value $codexExe但注意这种写法在每次 Codex 更新后都要重新执行除非你把它也放进$PROFILE并在里面动态计算。所以本质上还是函数更省心。接下来是 Codex 的模型配置。如果你用 TaoTokenCodex 的auth.json或环境变量里要填三件套。auth.json路径一般是%USERPROFILE%\.codex\auth.json一个可参考的配置结构如下字段名以 Codex 实际版本为准这里给出对照关系{ base_url: https://taotoken.net/api, api_key: 你的 TaoToken API Key, model: 你的 Model ID }如果你用的是环境变量方式可以在$PROFILE里加$env:OPENAI_BASE_URL https://taotoken.net/api $env:OPENAI_API_KEY 你的 TaoToken API Key注意环境变量方式和你已有的 OAuth 登录可能冲突二选一。如果你之前用 OAuth 登录过 Codex先确认当前用的是哪种鉴权模式别同时开两套。配置写完后重新加载$PROFILE再跑一次codex --version和一次真实请求。真实请求可以用一个简单任务比如让它读一个文件或回答一个问题确认模型调用链路通了。这里再补一个 PATH 层面的检查。如果你希望codex在 CMD 或其它终端也能用那需要把新版目录加进系统 PATH但目录名带随机串手动加不现实。更稳的做法还是用 PowerShell 函数或者写一个codex.cmd包装脚本放到一个固定目录再把固定目录加进 PATH。包装脚本内容echo off for /f delims %%i in (powershell -NoProfile -Command Get-ChildItem \%LOCALAPPDATA%\OpenAI\Codex\bin\*\codex.exe\ -File | Sort-Object LastWriteTime -Descending | Select-Object -First 1 -ExpandProperty FullName) do set CODEX_EXE%%i %CODEX_EXE% %*把这个codex.cmd放到C:\Tools\之类固定目录再把该目录加进 PATHCMD 里也能用。不过对大多数只用 PowerShell 的人来说函数方案已经够了。4. 验证请求与成功结果从 codex --version 到真实模型调用配置改完必须验证不然你不知道是命令入口通了还是模型调用也通了。验证分两层第一层是命令层第二层是请求层。命令层验证codex --version成功输出类似codex 0.x.x的版本号。如果这一步就报The term codex is not recognized说明$PROFILE没加载或函数没写对回到上一节检查。如果报的是路径相关错误比如Cannot find path说明函数里查找逻辑没匹配到文件用Get-ChildItem手动确认路径。再验证别名或函数是否生效Get-Command codex应该显示Function codex或Alias codex。如果是Application codex.exe说明系统 PATH 里也有一个可能和你的函数冲突需要确认优先级。请求层验证跑一个简单任务比如让 Codex 回答一个问题或读一个文件。具体命令取决于你的 Codex 版本常见的是codex 用一句话说明这个项目是做什么的如果配置了 TaoToken 的 Base URL 和 Key请求会走https://taotoken.net/api。成功的话你会看到模型返回内容。如果报 401说明 Key 不对或没带上如果报local proxy failed说明本地网络或代理配置有问题检查你的环境变量里有没有残留的代理设置如果报reading choices相关错误通常是响应格式和 Codex 预期不一致检查 Base URL 是否写成了带多余路径的形式。我实测下来最容易出问题的是 Base URL 多写了/v1或结尾斜杠。TaoToken 的 API 地址就是https://taotoken.net/api不要自己加/v1除非文档明确要求。Model ID 也要和文档一致大小写和连字符都不能错。如果你用的是 Codex 的 OAuth 模式那它不走 API Key验证方式不同。OAuth 模式下codex命令会引导你登录登录成功后请求走官方通道。但如果你要接 TaoToken就得切到 API Key 模式把auth.json或环境变量配好。两种模式不要混混了容易出现鉴权冲突。再给一个验证请求是否真的到了 TaoToken 的方法在 TaoToken 控制台的用量或日志页面看有没有对应请求记录。入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 登录后能看到调用情况。如果命令返回了内容但控制台没记录说明请求没走 TaoToken可能还在用旧配置或 OAuth。成功的结果应该是codex --version有版本号codex 任务有模型返回控制台有调用记录。三者都对上才算真正修好。如果你还想验证模型本身是否可用可以到模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 手动发一条消息确认模型和 Key 没问题再回到终端验证 Codex。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth 冲突这一节把真实会遇到的报错列出来对照排查。第一个是 401 Unauthorized。原因通常是 API Key 没填、填错、或者填了但没生效。检查auth.json里的api_key字段或者环境变量OPENAI_API_KEY是否在当前会话里。PowerShell 里可以用$env:OPENAI_API_KEY确认值是不是你复制的那个。如果为空说明$PROFILE没加载或变量名写错。注意 Key 只显示一次丢了就重新生成入口 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。第二个是local proxy failed。这个报错通常和本地网络配置有关比如系统里设了代理但代理不可用或者环境变量里有HTTP_PROXY、HTTPS_PROXY指向了一个失效地址。检查Get-ChildItem Env: | Where-Object { $_.Name -match PROXY }如果有输出确认这些代理是否还需要。不需要就清掉Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue然后重开 PowerShell 再试。注意这里说的是清理本地失效代理配置不是让你去搭什么通道别理解偏。第三个是reading choices相关错误。这通常出现在响应解析阶段Codex 期望的响应结构和实际返回不一致。常见原因是 Base URL 写错比如写成了https://taotoken.net/api/v1或结尾多了斜杠。改成https://taotoken.net/api再试。另一个原因是 Model ID 不对模型不存在时返回结构也会异常。对照文档确认 Model ID入口 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。第四个是 OAuth 冲突。如果你之前用 OAuth 登录过 Codexauth.json里可能有 OAuth 相关字段同时你又填了 API KeyCodex 可能优先走 OAuth导致你的 TaoToken 配置不生效。解决办法是确认当前鉴权模式要么清掉 OAuth 字段只用 API Key要么反过来。别两套并存。第五个是$PROFILE没加载。PowerShell 默认可能不允许执行脚本检查执行策略Get-ExecutionPolicy如果是Restricted改成Set-ExecutionPolicy -Scope CurrentUser RemoteSigned然后再. $PROFILE。这一步很多人漏掉导致改了配置文件但没生效。第六个是函数里Get-ChildItem找不到文件。确认 Codex 安装目录是不是%LOCALAPPDATA%\OpenAI\Codex\bin\。有些版本可能装在别的地方用Get-ChildItem $env:LOCALAPPDATA\OpenAI -Recurse -Filter codex.exe -ErrorAction SilentlyContinue全盘找一下。找到后把函数里的路径改成实际路径。第七个是 CMD 里能用但 PowerShell 里不能用或者反过来。这是 PATH 和$PROFILE作用域不同导致的。PowerShell 的函数只在 PowerShell 会话里生效CMD 读的是系统 PATH。如果你两个都要用就用前面说的codex.cmd包装脚本方案。排查时建议按顺序先codex --version确认命令层再codex 任务确认请求层再看控制台记录确认走没走 TaoToken。一层一层来别跳。6. 语义一致 CTA把命令入口和模型入口都固定下来命令入口修好之后建议把$PROFILE备份一份比如复制到 OneDrive 或 Git 仓库换机器时直接拉下来用。函数里的查找逻辑不依赖具体版本号所以 Codex 再更新也不用改。这是这套方案最大的价值一次配置长期稳定。模型入口这边TaoToken 的三件套建议也固定下来。Base URL 固定写https://taotoken.net/apiAPI Key 放在auth.json或环境变量里Model ID 按文档填。需要生成或轮换 Key 就去 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 需要查文档就去 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。如果你还在选模型可以到模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 先试。长期做编码和 Agent 任务的话Coding Plan 入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。最后给一个实用技巧在$PROFILE里加一个codex-path函数专门用来打印当前解析到的codex.exe路径方便你排查function codex-path { Get-ChildItem $env:LOCALAPPDATA\OpenAI\Codex\bin\*\codex.exe -File | Sort-Object LastWriteTime -Descending | Select-Object -First 1 -ExpandProperty FullName }以后codex出问题先跑codex-path看路径对不对再跑codex --version看命令通不通两步就能定位。这套组合我在多台 Windows 机器上用过Codex 更新后基本不用再手动改路径。