Reputation: 1793
Is there a way to get the parameters for a Method MemberType when using Get-Member?
Example:
Get-Process | Get-Member -MemberType Method
What I need from this example is the parameters and parameter types of each member in the list.
The purpose of this is to get the members, parameters, and parameter types of a COM+ object I have to create documentation for. So an example can't be .net specific.
I will be piping the member and parameter info into a razor template to generate the appropriate html.
Edit: A better example would be this...
$comObj = New-Object -ComObject COMAdmin.COMAdminCatalog
$comObj | Get-Member -MemberType Method
In this example I need to get the parameter names (if there are any) for each method returned.
Upvotes: 6
Views: 17893
Reputation: 27491
Run the method without the parentheses:
$a = 'foo'
$a.replace
OverloadDefinitions
-------------------
string Replace(char oldChar, char newChar)
string Replace(string oldValue, string newValue)
Com objects don't work as well:
$comObj = New-Object -ComObject COMAdmin.COMAdminCatalog
$comobj.AliasComponent
OverloadDefinitions
-------------------
void AliasComponent (string, string, string, string, string)
Upvotes: 0
Reputation: 1
I know this is some time back and I fell upon this when trying to get the same answer, thinking it must be possible somehow. Would you know it, it is! Here's a demo:
Class SomeClass {
$somevar
SomeClass($somevar){
# Construct
$this.somevar = $somevar
}
[void]SomeMethod([string]$arg1,[object]$arg2,$arg3){
# Do a thing
}
}
Get all method names:
([type]"SomeClass").GetMethods() | Select-Object Name
Name
----
get_somevar
set_somevar
SomeMethod
GetType
ToString
Equals
GetHashCode
Retrieve the args for the named method:
([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 : {}
I hope this helps if anyone else ends up lurking around here!
Upvotes: 0
Reputation: 201812
Get-Member
is meant more for exploring .NET types than PowerShell Commands. For a simple "view" of a command's parameters try this:
Get-Command Get-Process -Syntax
For details on the parameters try this:
Get-Command Get-Process | Select -Expand ParameterSets
If you're looking for more detail on a .NET type member's parameters then try this:
C:\PS> Get-Process | Get-Member -Name WaitForExit
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
WaitForExit Method bool WaitForExit(int milliseconds), void WaitForExit()
As for COM objects, that is likely to be a bit more hit or miss. PowerShell doesn't always get type metadata for COM objects. BTW I do get parameter info (the parameter types) for the COM object you list in your question:
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))
I'm afraid that is all the info PowerShell will give you in this case.
Upvotes: 8