Get-Command 是什么
Get-Command 用来查找命令是否存在、来自哪个模块、有哪些参数,是排查「命令找不到」与「同名命令行为不一致」的第一工具。PowerShell 里一个名字可能同时对应别名、函数、内置命令与外部程序,执行时按优先级选择其中一个,所以看到的行为常常与预期不同。用它可以一次性列出所有同名项,看清真实的来源;也可以按类型过滤,快速找到某个模块里有哪些可用命令,是探索环境的好帮手。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 语法 | Get-Command [[-Name] <名称或通配符>] [-CommandType <类型>] [-Module <模块>] [-All] |
| 命令类型 | 别名、函数、筛选器、内置命令、外部应用程序、脚本 |
| 全量查找 | 加全量参数后同类同名项都会列出,可解释命名冲突 |
| 参数查询 | 查看某个命令的完整参数列表与类型 |
| 排查用途 | 确认模块是否加载、命令来源路径是否正确 |
典型使用场景
- 命令提示找不到时,确认它是否真的存在、来自哪个模块
- 排查同名冲突:列出全部同名项,看清实际生效的是哪一个
- 探索模块:按类型过滤列出某类命令,快速了解可用能力
- 查看参数:查某个命令支持的参数名称与写法
- 版本差异核对:同一脚本在不同版本上行为不一致时,比对命令来源
- 脚本自检:启动时校验依赖命令是否存在,缺失就提前报错
常用示例
常用示例
# 按通配符查找内置命令
Get-Command *service* -CommandType Cmdlet
# 列出同名项:解释为什么行为与预期不同
Get-Command ping -All
# 查看命令来自哪个模块
(Get-Command Get-Service).Source
# 查看命令的完整参数
(Get-Command Get-ChildItem).Parameters.Keys
# 判断某个命令是否存在,用于脚本自检
if (Get-Command Get-NetTCPConnection -ErrorAction SilentlyContinue) { '可用' } else { '缺失' }
# 按模块列出全部命令
Get-Command -Module Storage命令类型与优先级
| 类型 | 说明 | 查找要点 |
|---|---|---|
| Alias | 别名,指向另一个命令 | 别名最容易造成误解,优先用全量参数核对 |
| Function | 函数,可来自会话或模块 | 会话临时函数会覆盖同名内置命令 |
| Cmdlet | 内置命令,来自模块 | 来源字段显示所属模块名 |
| Application | 外部可执行程序 | 需要确认所在路径是否被环境变量覆盖 |
| Script | 脚本文件 | 确认执行策略与文件路径是否可用 |
| Filter | 筛选器,行为近似函数 | 较少见,排查时注意类型差异 |
命令找不到时不要只盯着环境变量里的可执行文件路径:多数情况下是模块没有导入,或模块搜索路径配置不正确,先用它确认命令属于哪个模块,再解决加载问题。
同名命令的优先级由类型决定,别名与函数会覆盖外部程序。脚本里依赖某个外部程序时,写清完整可执行文件名可避免被同名别名截走。