在 PowerShell 中获取方法的参数

问题描述 投票:0回答:2

使用 Get-Member 时是否可以获取 Method MemberType 的参数?

示例:

Get-Process | Get-Member -MemberType Method

这个例子中我需要的是列表中每个成员的参数和参数类型。

这样做的目的是获取我必须为其创建文档的 COM+ 对象的成员、参数和参数类型。因此,示例不能是特定于 .net 的。

我将把成员和参数信息通过管道传输到 razor 模板中以生成适当的 html。

编辑: 一个更好的例子是这样的......

$comObj = New-Object -ComObject COMAdmin.COMAdminCatalog
$comObj | Get-Member -MemberType Method

在此示例中,我需要获取返回的每个方法的参数名称(如果有)。

powershell
2个回答
8
投票

Get-Member
比 PowerShell 命令更适合探索 .NET 类型。对于命令参数的简单“视图”,请尝试以下操作:

Get-Command Get-Process -Syntax

有关参数的详细信息,请尝试以下操作:

Get-Command Get-Process | Select -Expand ParameterSets

如果您正在寻找有关 .NET 类型成员参数的更多详细信息,请尝试以下操作:

C:\PS> Get-Process | Get-Member -Name WaitForExit

   TypeName: System.Diagnostics.Process

Name        MemberType Definition
----        ---------- ----------
WaitForExit Method     bool WaitForExit(int milliseconds), void WaitForExit()

对于 COM 对象,这可能会有点碰运气。 PowerShell 并不总是获取 COM 对象的类型元数据。 顺便说一句,我确实获取了您在问题中列出的 COM 对象的参数信息(参数类型):

C:\PS> $comObj = New-Object -ComObject COMAdmin.COMAdminCatalog
C:\PS> $comObj | gm QueryApplicationFile


   TypeName: System.__ComObject#{790c6e0b-9194-4cc9-9426-a48a63185696}

Name                 MemberType Definition
----                 ---------- ----------
QueryApplicationFile Method     void QueryApplicationFile (string, string, string, bool, bool, SAFEARRAY(Variant))

恐怕这就是 PowerShell 在这种情况下为您提供的所有信息。


0
投票

我知道这是很久以前的事了,当我试图得到相同的答案时,我想到了这一点,认为这一定是可能的。你知道吗,就是这样!这是一个演示:

Class SomeClass {
    $somevar
    SomeClass($somevar){
        # Construct
        $this.somevar = $somevar
    }

    [void]SomeMethod([string]$arg1,[object]$arg2,$arg3){
        # Do a thing
    }
}

我们想要获取某个方法的参数,我们可以通过以下方式获取所有方法的名称:

([type]"SomeClass").GetMethods() | Select-Object Name
Name
----
get_somevar
set_somevar
SomeMethod
GetType
ToString
Equals
GetHashCode

我们需要 SomeMethod 的参数,因此我们使用以下方式调用它:

([type]"SomeClass").GetMethod("SomeMethod").GetParameters()

ParameterType    : System.String
Name             : arg1
HasDefaultValue  : False
DefaultValue     : 
RawDefaultValue  : 
MetadataToken    : 134217730
Attributes       : None
Member           : Void SomeMethod(System.String, System.Object, System.Object)
Position         : 0
IsIn             : False
IsLcid           : False
IsOptional       : False
IsOut            : False
IsRetval         : False
CustomAttributes : {}

ParameterType    : System.Object
Name             : arg2
HasDefaultValue  : False
DefaultValue     : 
RawDefaultValue  : 
MetadataToken    : 134217731
Attributes       : None
Member           : Void SomeMethod(System.String, System.Object, System.Object)
Position         : 1
IsIn             : False
IsLcid           : False
IsOptional       : False
IsOut            : False
IsRetval         : False
CustomAttributes : {}

ParameterType    : System.Object
Name             : arg3
HasDefaultValue  : False
DefaultValue     : 
RawDefaultValue  : 
MetadataToken    : 134217732
Attributes       : None
Member           : Void SomeMethod(System.String, System.Object, System.Object)
Position         : 2
IsIn             : False
IsLcid           : False
IsOptional       : False
IsOut            : False
IsRetval         : False
CustomAttributes : {}

如果其他人最终潜伏在这里,我希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.