查找命令来自别名、函数、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
sc、curl、where 都是典型;用 Get-Command -All 看全部候选,或明确写 sc.exe、curl.exe。CommandType 和 Source,用 -NoProfile 对照。-All 时只显示最终会执行的命令,容易误判“系统里没有另一个版本”;排查版本冲突必须加 -All。Get-Command 能找到模块中的命令,不代表模块能正常加载;执行时仍可能因 PSModulePath、依赖或版本报错,用 Import-Module -Verbose 验证。Version 的含义随命令类型不同(cmdlet 通常是模块版本);比较外部程序的实际文件版本用 (Get-Item (Get-Command x).Source).VersionInfo。-Syntax 只给语法摘要,参数含义和示例要 Get-Help;两者配合使用。curl、wget、sc 指向 Windows 上的旧目标。Get-Help — 查看参数说明、示例和详细帮助。PowerShell — 理解 profile 和版本对命令解析的影响。Get-ChildItem — 验证模块路径下的命令文件。Get-Service — 对比 sc 别名与 sc.exe 的行为。合上页面,先回答,再展开对照。
Get-Command sc 看到的可能不是服务控制程序?sc 在 PowerShell 中是 Set-Content 的别名,会遮住 sc.exe;需要服务控制时写 sc.exe。CommandType 和 Source,必要时用 Get-Command -All 列出全部候选。
小程序版
微信扫码,随时查命令