如何使用PowerShell Get-Member cmdlet

时间:2009-03-20 23:11:18

标签: powershell

一个新手问题:

命令:

[Math] | Get-Member

返回System.RuntimeType的所有成员。那是为什么?

还有命令:

Get-Member -InputObject [Math]

返回System.String的所有成员。如果[Math]在此处被解释为字符串,我该如何将其作为数学对象?

此外,Get-member是否采用任何位置参数?我该怎么说?

4 个答案:

答案 0 :(得分:20)

您从[Math]获取System.RuntimeType,因为它就是这样。它是一种类型,而不是该特定类型的对象。您实际上没有构建[Math]对象。如果输入:

,您将获得相同的输出
[String] | gm

但是,如果您从String类型构造了一个字符串对象,那么您将获得字符串成员:

PS C:\> [String]("hi") | gm


   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()
CompareTo        Method                System.Int32 CompareTo(Object value), System.Int32 CompareTo(String strB)
Contains         Method                System.Boolean Contains(String value)
CopyTo           Method                System.Void CopyTo(Int32 sourceIndex, Char[] destination, Int32 destinationIn...
etc...

由于System.Math只有静态成员,因此无法构造它的对象。要查看它的成员,您可以使用System.RuntimeType的GetMembers()函数:

[Math].GetMethods()

您可以使用format- * cmdlet之一格式化输出:

[Math].GetMethods() | format-table

编辑:哦,我应该补充一下,要调用其中一个静态成员,你会这样做:

[Math]::Cos(1.5)

答案 1 :(得分:7)

我刚写了blog post on exploring static members of classes with PowerShell,这可能会有所帮助。

当您将[Math]传递给Get-Member时,您正在传递System.RunTimeType的对象,并且它确实返回该类型的成员。

Get-Member有一个switch参数,允许您检查类的所有静态成员:

[Math] | get-member -static

如果您需要查找实例成员,则需要创建类的实例并将其传递给Get-Member。

答案 2 :(得分:1)

  

此外,Get-member是否采取任何措施   位置参数?我该怎么说?

如果参数名称包含在'[]'中,则名称是可选的,因此参数是位置的。 例如,对于Get-Member(下面的定义),Name是位置的,但InputObject不是。

  

Get-Member [[-Name]]   [-Force] [-InputObject]   [-MemberType {AliasProperty |   CodeProperty | Pro perty |   NoteProperty | ScriptProperty |   属性| PropertySet |方法|   CodeMethod | ScriptMethod |方法|   P arameterizedProperty | MemberSet |   活动|全部}] [ - 静态] [ - 查看   {扩展|改编|基地|所有}]   []

对于前两个问题,似乎您希望它们表现得像对象,但您正在进入命名空间/类。如果你做“1 | gm”或“gm -inputobject 1”,你会看到更多你想要/期望的东西。

答案 3 :(得分:1)

  1. 使用get-help get-member命令可以获得此输出
  2. NAME     获取会员

    概要     获取对象的属性和方法。

    SYNTAX     Get-Member [[-Name]] [-Force] [-InputObject] [-MemberType {AliasProperty | CodeProperty |临     佩蒂| NoteProperty | ScriptProperty |属性| PropertySet |方法| CodeMethod | ScriptMethod |方法| P     arameterizedProperty | MemberSet |活动| All}] [-Static] [-View {Extended |改编|基地|全部}] []

    说明     Get-Member cmdlet获取对象的“成员”(属性和方法)。

    To specify the object, use the InputObject parameter or pipe an object to Get-Member. To retrieve information about
     static members (members of the class, not of the instance), use the Static parameter. To get only certain types of
     members, such as NoteProperties, use the MemberType parameter.
    

    相关链接     在线版:http://go.microsoft.com/fwlink/?LinkID=113322     加入会员     得到帮助     获取命令     得到-PSDrive来

    备注     要查看示例,请键入:“get-help Get-Member -examples”。     有关更多信息,请键入:“get-help Get-Member -detailed”。     有关技术信息,请键入:“get-help Get-Member -full”。

    1. 从上面的语句中可以看出,get-member只接受对象而不是类。您可以使用-Static查看对象的静态成员。

    2. 当你使用没有-Static参数的[String]时,你告诉powershell你正在放置一个[String]类型的对象,但是,你还没有从你的任何语句中创建一个String对象,所以它假设[String]是表示类String的System.Runtime对象。如果使用[Int]或[Boolean]和其他类类型,则类似。

    3. 但是,如果使用-Static参数,那么powershell解释器现在知道您需要String Objects的静态成员。