
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 完整安裝方式和跨平臺說明