tags:

views:

1254

answers:

3

A newbie question:

The command:

[Math] | Get-Member

Returns all members of System.RuntimeType. Why is that?

Also the command:

Get-Member -InputObject [Math]

Returns all members of System.String. If "[Math]" is interpreted as string here, how can I make it a math object?

Also, does Get-member takes any positional parameters? How can I tell?

+1  A: 

Also, does Get-member takes any positional parameters? How can I tell?

If the parameter name is wrapped in '[]' then the name is optional, so the parameter is positional. For example for Get-Member (definition below), Name is positional but InputObject is not.

Get-Member [[-Name] ] [-Force] [-InputObject ] [-MemberType {AliasProperty | CodeProperty | Pro perty | NoteProperty | ScriptProperty | Properties | PropertySet | Method | CodeMethod | ScriptMethod | Methods | P arameterizedProperty | MemberSet | Event | All}] [-Static] [-View {Extended | Adapted | Base | All}] []

For the 1st 2 questions, it seems like you expect them to behave like objects but you are entering a namespace/class. If you do "1 | gm" or "gm -inputobject 1" you will see more like what you want/expect.

Mohit Chakraborty
+7  A: 

You are getting a System.RuntimeType from [Math] because that is what it is. It's a Class type as opposed to an object of that particular type. You haven't actually constructed a [Math] object. You will get the same output if you typed:

[String] | gm

However, if you constructed a string object from the String type, you would get the string members:

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...

Since System.Math has only static members, you can't construct an object of it. To see it's members you can use the GetMembers() function of System.RuntimeType:

[Math].GetMethods()

You can use one of the format-* cmdlets to format the output:

[Math].GetMethods() | format-table

Edit: Oh, and I should add, to invoke one of the static members, you would do it like this:

[Math]::Cos(1.5)
zdan
+3  A: 

I just wrote a blog post on exploring static members of classes with PowerShell, which might help.

What is happening when you pipe [Math] to Get-Member, you are passing in an object of System.RunTimeType, and it does return the members of that type.

There is a switch parameter for Get-Member which allows you to examine all the static members of a class:

[Math] | get-member -static

If you need to find instance members, you will need to create an instance of the class and pipe that to Get-Member.

Steven Murawski