如何使用PowerShell Get-Members cmdlet

pbpqsu0x  于 2022-11-10  发布在  Shell
关注(0)|答案(5)|浏览(157)

一个新手问题:
该命令如下:

[Math] | Get-Member

返回System.RuntimeType的所有成员。为什么会这样呢?
还可以使用以下命令:

Get-Member -InputObject [Math]

返回System.String的所有成员。如果[Math]在这里被解释为字符串,我如何使其成为数学对象?
另外,Get-member是否接受任何位置参数?我怎么知道呢?

8hhllhi2

8hhllhi21#

您将从[Math]获得一个System.RounmeType,因为它就是这样的。它是一个类类型,而不是该特定类型的对象。您实际上还没有构造[Math]对象。如果您键入以下命令,您将得到相同的输出:

[String] | gm

但是,如果从字符串类型构造了一个字符串对象,则会获得字符串成员:

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.RounmeType的GetMembers()函数:

[Math].GetMethods()

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

[Math].GetMethods() | format-table

**编辑:**哦,我还要补充一句,要调用其中一个静态成员,您可以这样做:

[Math]::Cos(1.5)
pepwfjgg

pepwfjgg2#

我刚刚写了一个blog post on exploring static members of classes with PowerShell,这可能会有帮助。
当您通过管道将[Math]传递给Get-Members时,您传入的是System.RunTimeType的对象,并且它确实返回了该类型的成员。
Get-Members有一个开关参数,它允许您检查类的所有静态成员:

[Math] | get-member -static

如果需要查找示例成员,则需要创建要获取成员的类和管道的示例。

qvsjd97n

qvsjd97n3#

另外,Get-Members是否采用任何位置参数?我怎么知道呢?
如果参数名括在‘[]’中,则该名称是可选的,因此该参数是位置参数。例如,对于Get-Members(如下定义),名称是位置的,但InputObject不是。
Get-Member-name[-Force][-InputObject][-MemberType{AliasProperty|CodeProperty|Pro perty|NoteProperty|ScriptProperty|Properties|PropertySet|方法|CodeMethod|ScriptMethod|Methods|P arameterizedProperty|MemberSet|Event|All}][-Static][-View{Extended|Adapted|Base|All}][]
对于前两个问题,您似乎希望它们的行为像对象一样,但您进入的是一个命名空间/类。如果您执行“1|gm”或“gm-inputoject 1”,您将看到更多您想要/期望的东西。

busg9geu

busg9geu4#

1.使用Get-Help Get-Members命令,您将获得以下输出
名称获取成员
获取对象的属性和方法。
语法Get-Member-name[-Force][-InputObject][-MemberType{AliasProperty|CodeProperty|Pro perty|NoteProperty|ScriptProperty|Properties|PropertySet|方法|CodeMethod|ScriptMethod|Methods|P arameterizedProperty|MemberSet|Event|All}][-Static][-View{Extended|Adapted|Base|All}][]
说明Get-Member cmdlet获取对象的“Members”(属性和方法)。

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 Add-Members Get-Help Get-Command Get-PSDrive
备注:要查看示例,请键入:“Get-Help Get-Members-Examples”。如需了解更多信息,请输入:“Get-Help Get-Members-Detailed”。有关技术信息,请键入:“Get-Help Get-Members-Full”。
1.从上面的语句可以看出,Get-Members只接受对象,不接受类。您可以使用-Static查看对象的静态成员。
1.当您使用不带-Static参数的[字符串]时,您是在告诉PowerShell您正在放置一个[字符串]类型的对象,但是,您还没有从您的任何语句创建一个字符串对象,因此它假定[字符串]是一个表示类字符串的System.Runtime对象。这类似于您使用[Int]或[Boolean]和其他类类型。
1.但是,如果您使用-Static参数,PowerShell解释器现在会理解您需要的是字符串对象的静态成员。

jdg4fx2g

jdg4fx2g5#

如果您不希望[Math]被视为字符串,并且您也不想通过管道将其输入,则只需将其包含在$()中,就像您正在使用变量一样,如下所示:

Get-Member -InputObject $([Math])

这与[Math] | Get-Member的功能相同

相关问题