关于本文
本文是通过利用生成式 AI 的自动化工作流创建的。我们确认了 PowerShell 的命令优先级(command precedence)和环境变量规范,并将其整理为在不修改 User/Machine PATH 的情况下仅临时更改同名 CLI 搜索顺序的步骤。未在 Windows 实机上重新执行。验证状态:📘 已确认官方规范·Windows 实机未验证
信息确认日期:2026年10月2日。
当遇到“命令明明已经安装了但运行的却是另一个版本”的情况时,在触碰永久 PATH 之前,先确认 PowerShell 按照什么顺序找到同名命令。
首先尝试
Daily-Code-Samples 在 TEMP 下创建了 A/B 两个目录以及同名的 papanda-demo.cmd,并仅在当前的 PowerShell 进程中调换了 PATH 的顺序。
.\Show-PathPrecedence.ps1 Get-Command papanda-demo -All
在 PowerShell 中,如果仅通过名称调用,则存在别名(Alias)、函数(Function)、小程序(Cmdlet)、外部可执行文件等优先级。在外部命令之间,PATH 上的搜索顺序非常重要。
更改一处
$env:Path = "$dirB;$dirA;$oldPath"
仅将 A/B 的顺序颠倒,观察 Get-Command -All 的排列顺序和执行结果是否会发生变化。
为什么要在 Process 作用域中进行测试
如果是当前进程内的更改,则无需直接改写 User/Machine 的永久 PATH 即可进行排查。将不可信的目录放到 PATH 前方会导致同名命令被替换,因此示例中仅使用自己创建的 TEMP。
flowchart LR A["コマンド名"] --> B["PowerShellの種類別優先順位"] B --> C["外部コマンドならPATH探索"] C --> D["先に見つかったCLI"]
如果在工作中应用
当 Python、Git、Node.js 等的版本与预期不符时,比起重新安装,更应先记录 Get-Command -All 和 PATH 顺序。

