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

PowerShell中如何引用Cmdlet本身而非执行该Cmdlet?

如何在PowerShell中引用Cmdlet本身以研究其特性

我正在使用PowerShell 7.4学习PowerShell基础,想查看表达式的类型,比如执行:

[PowerShell] | gm

得到:

TypeName: System.RuntimeType

或者执行:

[PowerShell].GetType()

得到:

IsPublic IsSerial Name            BaseType
-------- -------- ----            --------
False    False    RuntimeType     System.Reflection.TypeInfo

但无法获取Cmdlet本身的类型,因为直接调用Cmdlet会自动执行,比如:

Get-Help | gm

返回的是Cmdlet输出对象的成员,而非Cmdlet自身的成员。

我尝试执行:

(Get-Command Get-Help).GetType()

得到:

IsPublic IsSerial Name          BaseType
-------- -------- ----          --------
True     False    CmdletInfo    System.Management.Automation.CommandInfo

可见Get-Command返回的是CmdletInfo对象,而非Cmdlet类型对象。根据PowerShell SDK,Cmdlet的基类是System.Management.Automation.Cmdlet:

[System.Management.Automation.Cmdlet]

输出:

IsPublic IsSerial Name   BaseType
-------- -------- ----   --------
True     False    Cmdlet System.Management.Automation.Internal.InternalCommand

解决方法

要获取Cmdlet本身的.NET类型,需通过CmdletInfo对象的ImplementingType属性,该属性存储了Cmdlet的实际实现类:

  1. 获取指定Cmdlet的实现类型:
# 获取Get-Help的实际实现类型
(Get-Command Get-Help).ImplementingType

输出示例:

IsPublic IsSerial Name                BaseType
-------- -------- ----                --------
True     False    GetHelpCommand      System.Management.Automation.Cmdlet
  1. 查看该Cmdlet类型的成员(方法、属性等):
(Get-Command Get-Help).ImplementingType | Get-Member
  1. 若要查看所有Cmdlet的基类System.Management.Automation.Cmdlet的特性,直接执行:
[System.Management.Automation.Cmdlet] | Get-Member

补充说明

  • 部分内部Cmdlet的实现类型可能不公开,但绝大多数内置Cmdlet都可通过此方法获取到类型信息。
  • ImplementingType返回的是具体的Cmdlet实现类,它继承自System.Management.Automation.Cmdlet基类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:52:34