Codex CLI 安装后 PowerShell 找不到命令?检查 PATH 和旧版本
Codex CLI 安装后 PowerShell 找不到命令检查 PATH 和旧版本安装或升级 Codex CLI 后如果 PowerShell 找不到codex或codex --version仍是旧版本先看当前 PowerShell 实际解析到哪个入口。安装命令正常结束不等于当前窗口已经切到新入口在确认来源前也不要继续叠加安装。PATH 是系统查找命令时依次检查的一组目录。这里检查 PATH是为了确认 PowerShell 会搜索哪些目录、最终选择哪个codex以及它是否属于刚安装或刚更新的来源。这篇只处理 PowerShell 中的命令解析、安装来源和版本。登录、配置或模型请求失败属于后续问题不要通过反复修改 PATH 解决。现象可能卡点要确认什么先做什么新旧 PowerShell 都找不到预期入口也无法确认没有留下可用入口文件不存在还是 PowerShell 找不到回到原安装来源确认入口仍不存在时再恢复安装暂不查版本新窗口能找到旧窗口找不到旧会话未刷新 PATH两个窗口的解析结果是否不同使用新窗口继续不修改 PATH入口存在新窗口仍找不到入口目录不在当前 Windows PATHPowerShell 是否会搜索该目录只处理已确认的目录或安装来源第一项是 Alias 或 FunctionShell 定义抢占codex被遮住的外部入口在哪里定位定义来源不卸载 Codex能运行但版本旧或候选跨不同父目录旧安装优先或更新了另一来源实际执行哪份安装、由谁管理按当前入口来源更新或处理旧来源PowerShell 与 WSL 结果不同检查了两个运行环境两个 Shell 各自选择哪个入口在准备运行 Codex 的环境中继续先处理表中最上游的失败当前层未通过不要用版本或登录结果替它验收。同一 npm 全局目录中的.ps1、.cmd和无扩展入口可能只是一份安装的包装文件不等于多个版本。用实际入口判断 PowerShell 卡在哪一层所有命令都输入在出现问题的 PowerShell 中。先查当前实际入口Get-Commandcodex它返回当前 PowerShell 输入codex时实际会执行的入口Application或ExternalScript记下Source或Path继续核对全部候选。Alias或Function命令名被 Shell 定义抢占先列出全部候选再按本节末尾的条件分支处理暂不运行版本命令。报找不到命令打开全新的 PowerShell 再试。新窗口仍找不到时先确认原安装来源和预期入口入口存在时只处理它的父目录或原来源入口也不存在或无法确认时再按原来源恢复安装。接着列出同名候选Get-Commandcodex-All|Select-ObjectCommandType,Name,Source第一行应与不带-All的实际入口一致。其余行是 PowerShell 能发现的同名候选。候选分布在不同父目录时才需要重点怀疑多份安装或旧 PATH 项同一目录里的.ps1、.cmd和无扩展文件可能只是一份 npm 安装生成的不同包装入口。如果第一项是Alias或Function先跳到本节末尾处理该条件分支其他读者继续下面两项检查。再看 Windows 能从当前目录和 PATH 找到哪些外部文件where.exe codex每一行是一个外部文件候选。没有输出且退出码非 0表示where.exe没在自己的搜索范围中找到匹配项。它不是 PowerShell 的完整解析器因此判断 PowerShell 实际执行谁仍以Get-Command codex为准。最后查看实际入口报告的版本codex--version如果路径已经指向旧目录这条命令只会再次显示旧入口的版本必须把路径和版本放在一起判断。仅当第一项是 Alias 或 Function如果第一项是Alias或Function继续运行Get-Commandcodex-All|Select-ObjectCommandType,Name,Definition,Options,SourceGet-Commandcodex-All|Where-Object{$_.CommandType-in(Application,ExternalScript)}|Select-ObjectCommandType,Name,SourceAlias 的Definition是别名目标Function 的Definition是函数体二者都不是 Codex 安装文件。第二条查询只保留外部文件候选后续使用这些候选的Source判断安装来源。如果没有外部候选当前 PATH 中还没有可供 PowerShell 直接启动的 Codex 文件。如果确认这个 Alias 或 Function 不该继续抢占codex可以只在当前 PowerShell 中临时移除第一项并重新查询$entryGet-Commandcodexif($entry.Options-matchReadOnly|Constant){$entry|Select-ObjectCommandType,Name,Definition,Optionsthrow当前 Alias 或 Function 不能直接移除请先确认它来自哪个 Profile 或模块。}if($entry.CommandType-eqAlias){Remove-Item-LiteralPathAlias:codex}elseif($entry.CommandType-eqFunction){Remove-Item-LiteralPathFunction:codex}Get-Commandcodex这只改变当前 PowerShell 会话新窗口不会继承这次移除操作。普通定义会继续执行移除如果Options显示ReadOnly或Constant命令会先停止。不要盲目追加-Force。先用$PROFILE | Select-Object *列出 Profile 路径只检查自己维护且实际存在的文件再根据Definition定位并处理那一项。Profile 中没有对应定义时再检查自己明确加载的模块全新的 PowerShell 仍出现同一定义时也按这条持久来源处理。实际入口变成外部文件之前不要卸载已经找到的 Codex 安装。处理后从Get-Command codex重新完成本节四项检查。用实际案例判断多个入口下面是 2026-08-08 Windows PowerShell 脱敏整理案例Get-Command只保留指定字段并重新对齐路径没有个人目录where.exe保留全部两行版本命令保留版本行。CommandType Name Source ExternalScript codex.ps1 C:\npm-global\codex.ps1 Application codex.cmd C:\npm-global\codex.cmd Application codex C:\npm-global\codexC:\npm-global\codex C:\npm-global\codex.cmdcodex-cli 0.147.0Get-Command的字段可以这样读CommandType是 PowerShell 识别到的候选类别。本例把.ps1识别为ExternalScript把另外两个入口识别为Application。Name是候选文件名。文件名不同不等于安装了三个 Codex 版本。Source是候选入口路径。本例三项都在C:\npm-global属于同一个 npm 全局目录。不带-All的Get-Command codex在本例中选择第一项codex.ps1。where.exe的两行分别表示它找到了无扩展的codex和codex.cmd它没有列出.ps1这正是不能用where.exe代替 PowerShell 解析结果的原因。codex-cli 0.147.0是当时实际优先入口报告的版本。这一行没有安装来源或其他 PATH 候选的信息也没有检查登录、配置或请求。0.147.0 只是本文核验日期对应的参考版本不是“永远最新版”的承诺。先确认运行环境再判断安装来源PowerShell 中的结果只代表 Windows 原生环境。准备在 Windows 原生运行 Codex 时再判断入口来自 npm 还是官方独立安装器准备在 WSL 中运行时要进入 WSL 的 Linux Shell 重新检查。Windows 原生 PowerShellnpm 全局安装在当前 PowerShell 中运行npm prefix-g npm root-g第一条给出 npm 全局前缀第二条给出全局包目录。实际codex路径与npm prefix -g一致并且npm root -g下存在openai/codex时可以确定这份入口由 npm 管理。本例三个候选同属C:\npm-global这个 npm 全局目录因此同目录包装入口不能直接算成三份安装。当前npm找不到或前缀与codex路径完全无关时先确认安装时是否使用了另一套 Node/npm不要直接卸载现有 Node.js。Windows 官方独立安装器当前官方 Windows 安装器的默认可见入口位于%LOCALAPPDATA%\Programs\OpenAI\Codex\bin\codex.exe%LOCALAPPDATA%是当前 Windows 用户的本地应用数据目录。安装器允许改变默认位置因此路径只能作为线索还要确认当前入口不是 npm 包装入口且目录由独立安装器管理。WSL 的 Linux ShellWSL 是 Windows 提供的 Linux 子系统。PowerShell 找到C:\...入口不代表 WSL 会执行同一个文件WSL 也可能通过互操作看到 Windows PATH 中的入口。准备在 WSL 中运行 Codex 时应进入 WSL 的 Bash 或 Zsh再执行command-vcodextype-acodex codex--version根据 WSL 中的实际 Linux 路径再判断入口来自 Linux 独立安装器还是该 WSL 自己的 npm。PowerShell 中的结果不能代替这一步。按相同来源更新不要混用安装器确认来源后再更新。下面是截至 2026-08-08 OpenAI 官方页面提供的 Windows 独立安装器和 npm 命令请在自己的环境执行完成后仍要按下一节核对新 PowerShell 中的路径和版本。本文只核对了官方命令并运行codex update --help没有实际执行安装、更新、卸载或 PATH 修改。powershell-ExecutionPolicy ByPass-cirm https://chatgpt.com/codex/install.ps1 | iexnpm 安装与更新使用npm install-g openai/codex只有 npm 路径要求 Node.js。任何安装或更新命令报错、退出非 0 时都先停止保留错误信息和原入口不要临时换一种包管理器叠加第二份安装。当前 release 支持自更新时还可以先查看codex update--helpCodex CLI 0.147.0 提供这个更新入口并会根据检测到的 npm 或 Windows 独立安装器来源选择更新动作无法识别时会要求手动更新。后续版本应以当时的帮助和官方安装页为准。新 PowerShell 同时核对路径和版本安装器或包管理器正常结束后关闭旧 PowerShell打开新窗口并执行Get-Commandcodex|Select-ObjectCommandType,Source codex--version路径指向预期安装来源并且版本符合预期才算当前新终端已经切到正确入口。如果旧入口仍优先只处理已经确认来源的对象Alias 或 Function 按前面的分支处理外部文件则记录旧路径和管理器用对应的 npm 或独立安装器流程移除旧安装或从 PATH 中移除那一个已确认的旧目录然后再次打开新 PowerShell。不要批量删除 Node.js、配置目录或来源不明文件。官方资料确认安装、更新与 WSL 路径OpenAI Codex CLI 安装与更新、OpenAIcodex update命令、OpenAI Codex CLI 在 WSL 中的安装说明、Codex 0.147.0 安装来源更新动作源码。分别用于核对当前官方入口、更新命令、WSL 环境边界和本文固定版本的来源选择行为。理解 PowerShell 怎样选择命令命令优先级、Get-Command参考、Alias Provider、Function Provider、Profile 说明 和where命令参考。用于区分 PowerShell 实际入口、Shell 定义和外部文件候选。确认 npm 管理目录npm 全局目录规则。用于判断npm prefix -g、npm root -g与实际入口是否属于同一安装来源。参考文档查看 Muze Wiki 的 Codex 完整安装方式和跨平台说明