You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell 7 SDK PSCmdlet中GetCmdlet与GetCommand的区别及适用场景

InvokeCommand.GetCmdlet 与 InvokeCommand.GetCommand 差异说明

设计定位

  • InvokeCommand.GetCmdlet("命令名称"):是PowerShell SDK提供的原生Cmdlet专属元信息查询方法,仅能匹配到基于.NET编译实现的标准Cmdlet,返回的CmdletInfo是CommandInfo的子类,除基础命令属性外,还包含Cmdlet独有的元数据:比如实现类的类型信息、完整参数集定义、官方声明的输出类型、所属模块的完整注册信息等。
  • InvokeCommand.GetCommand("命令名称"):是PowerShell SDK提供的全类型命令通用查询方法,可以匹配PowerShell生态中所有可执行的命令类型,包括原生Cmdlet、别名、自定义函数、脚本、工作流、外部可执行文件等,返回的CommandInfo是所有命令元信息的基类,仅包含所有命令通用的基础属性(名称、基础参数列表、所属模块等)。

注意:你检索到的「工作流中调用Microsoft.PowerShell.Core\Get-Command命令的活动」是同名PowerShell工作流活动的描述,和SDK层面的InvokeCommand.GetCommand()方法无关,后者属于PowerShell SDK的基础通用API。

适用场景

优先选择 GetCmdlet 的场景

  • 明确需要调用的目标是原生编译的Cmdlet,不需要兼容其他类型的同名命令
  • 需要访问Cmdlet特有的元数据,比如反射获取实现类信息、校验特定参数集的可用性、读取Cmdlet的官方声明属性
  • 需要做严格的命令存在性校验,避免命中同名的别名、用户自定义函数或外部程序

优先选择 GetCommand 的场景

  • 需要查询的目标可能是任意类型的PowerShell命令,比如需要兼容用户自定义的同名函数替代原生Cmdlet的场景
  • 仅需要使用命令的通用属性,不需要访问Cmdlet特有的元数据
  • 需要做宽泛的命令存在性校验,匹配所有可用的同名可执行对象

如果是在自定义Cmdlet内部调用其他命令的场景,推荐优先用GetCmdlet做校验,避免环境中别名、自定义函数的覆盖问题,保证调用行为符合预期。

内容的提问来源于stack exchange,提问作者Jacques

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:54:05