如何使用PowerShell Get-Member cmdlet

the*_*bat 13 powershell

一个新手问题:

命令:

[Math] | Get-Member
Run Code Online (Sandbox Code Playgroud)

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

还有命令:

Get-Member -InputObject [Math]
Run Code Online (Sandbox Code Playgroud)

返回的所有成员System.String.如果[Math]在这里被解释为字符串,我怎样才能使它成为数学对象?

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

zda*_*dan 21

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

[String] | gm
Run Code Online (Sandbox Code Playgroud)

但是,如果您从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...
Run Code Online (Sandbox Code Playgroud)

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

[Math].GetMethods()
Run Code Online (Sandbox Code Playgroud)

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

[Math].GetMethods() | format-table
Run Code Online (Sandbox Code Playgroud)

编辑:哦,我应该添加,调用其中一个静态成员,你会这样做:

[Math]::Cos(1.5)
Run Code Online (Sandbox Code Playgroud)


Ste*_*ski 8

我刚刚写了一篇关于使用PowerShell探索类的静态成员的博客文章,这可能有所帮助.

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

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

[Math] | get-member -static
Run Code Online (Sandbox Code Playgroud)

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