约 2032 字

约 10 分钟

#命令找不到

运行命令时出现 CommandNotFoundException,通常意味着 PowerShell 在当前会话中找不到该名称对应的命令或程序:

Get-Command: The term 'foo' is not recognized as a name of a cmdlet, function,
script file, or executable program.

#常见原因

  • 命令名拼写错误,或大小写、连字符不一致。
  • 命令来自尚未安装或尚未导入的模块。
  • 可执行文件不在 PATH 环境变量中。
  • 同名别名或函数覆盖了原本的命令。
  • 命令只存在于 Windows PowerShell,PowerShell 7 中已被移除或改名。

#使用 Get-Command 排查

Get-Command 用于查找命令是否存在以及它的来源,详见 Get-Command 帮助手册。

> Get-Command nonexistent

查看同名命令的所有来源,或按名称模式搜索:

> Get-Command ls -All
> Get-Command -Name *service* -CommandType Cmdlet

#检查 PATH

外部程序依赖 PATH 环境变量。查看当前路径列表,或临时追加目录:

> $env:Path -split [System.IO.Path]::PathSeparator
> $env:Path += [System.IO.Path]::PathSeparator + '/opt/tools'

PATH 的修改只对当前会话有效。永久修改需要在系统中设置,Windows 与 Linux 的方式不同。

#导入或安装模块

命令来自模块但尚未导入时,先确认模块是否可用:

> Get-Module -ListAvailable
> Import-Module Az.Accounts

如果没有安装,可以从 PowerShell 库安装:

> Find-Module -Name Az
> Install-Module -Name Az -Scope CurrentUser

安装后如果仍然找不到命令,关闭并重新打开 PowerShell,让模块路径重新加载。

#别名与函数冲突

别名和函数的优先级高于同名外部程序。查看命令的实际来源:

> Get-Command ping -All
> Get-Alias -Name ls

如果确认是别名导致的问题,可以删除当前会话中的别名:

> Remove-Item Alias:ls

#版本差异

部分命令只在 Windows PowerShell 中存在,PowerShell 7 中需要使用替代命令:

旧命令替代命令
Get-WmiObjectGet-CimInstance
Get-EventLogGet-WinEvent
Out-GridViewOut-ConsoleGridView(需安装模块)

在脚本中调用外部命令时,使用完整路径或先验证命令是否存在:

if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
    throw '未找到 git,请先安装并加入 PATH'
}

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2