系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

Get-Command

查找命令来自别名、函数、cmdlet 还是可执行文件,并查看参数与语法。

补充说明

Get-Command 枚举当前会话可发现的命令,输出 CommandInfo 的派生类型(AliasInfo、FunctionInfo、CmdletInfo、ApplicationInfo、ExternalScriptInfo 等),常用属性有 Name、CommandType、Source、Version、Parameters;别名是 gcm。-Syntax 直接打印用法,-CommandType 可按类型过滤,-Module 可限定模块。

管道:-Name 可从管道按属性名绑定字符串,但它不消费任意对象;结果对象适合接 Where-Object、Select-Object。权限:查询命令本身不需要管理员;模块自动发现会读取 PSModulePath,模块文件仍然受 ACL 限制。

命令解析顺序是别名 > 函数 > cmdlet > 外部可执行文件;同名命令默认只看到最终会执行的那个,加 -All 才列出全部候选。版本:5.1 与 7.x 的发现模型一致,但 7.x 跨平台,模块和外部程序集合不同,curl、wget 等别名在 7.x 中不再指向 Invoke-WebRequest。

常用示例

# 1. 查看 cmdlet 的类型、来源模块和版本
PS C:\> Get-Command Get-ChildItem | Select-Object Name, CommandType, Source, Version

# 2. 按名词列出所有服务相关命令,适合发现同族 cmdlet
PS C:\> Get-Command -Noun Service | Sort-Object Name

# 3. 查看同名命令的全部候选,判断别名是否遮住了 exe
PS C:\> Get-Command python -All | Select-Object Name, CommandType, Source

# 4. 直接查看语法,比翻完整帮助快
PS C:\> Get-Command Get-Content -Syntax

# 5. 列出某个 cmdlet 接受的参数名
PS C:\> (Get-Command Get-ChildItem).Parameters.Keys | Sort-Object

# 6. 只看外部可执行文件,避开函数和别名
PS C:\> Get-Command -Name git* -CommandType Application | Select-Object Name, Source

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 同名命令同时存在别名、函数和 exe 时,PowerShell 默认执行哪一个?
  2. 为什么 Get-Command sc 看到的可能不是服务控制程序?
  3. 怎样区分一个命令来自模块、profile 函数还是外部程序?
答案
  1. 按别名 > 函数 > cmdlet > 外部可执行文件的顺序,默认只执行优先级最高的那个。
  2. sc 在 PowerShell 中是 Set-Content 的别名,会遮住 sc.exe;需要服务控制时写 sc.exe。
  3. 看 CommandType 和 Source,必要时用 Get-Command -All 列出全部候选。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令