.NETメソッドの引数リストを取得する

構文

($obj | Get-Member MethodName).Definition

解説

 Get-Memberコマンドレットを使用するとオブジェクトのメンバー一覧を取得できます。この結果として表示されるDefinitionプロパティを取得すると、メソッドの引数リストを取得することができます。

PS U:\PS> Get-Item .\File1.txt | Get-Member


   TypeName: System.IO.FileInfo

Name                      MemberType     Definition
----                      ----------     ----------
Mode                      CodeProperty   System.String Mode{get=Mo...
AppendText                Method         System.IO.StreamWriter Ap...
CopyTo                    Method         System.IO.FileInfo CopyTo...
(以下略)

 プロパティにアクセスできるのはコマンドレットの出力結果が1つのときです。MemberTypeがMethodであるものを1つだけ選びます。

PS U:\PS> Get-Item .\File1.txt | Get-Member Open


   TypeName: System.IO.FileInfo

Name MemberType Definition
---- ---------- ----------
Open Method     System.IO.FileStream Open(System.IO.FileMode mode)...


PS U:\PS>

 先ほどのコマンド全体を()でくくり、プロパティを指定します。

PS U:\PS> (Get-Item .\File1.txt | Get-Member Open).Definition
System.IO.FileStream Open(System.IO.FileMode mode), System.IO.FileStream Open(System.IO.FileMode mode, System.IO.FileAccess access), System.IO.FileStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share)
PS U:\PS>

 メソッドの引数リストが取得できました。結果が1行で表示されていますが、これは、以下の3つの定義をコンマで区切ったものです。

 定義ごとに改行すると少しは見やすくなりますが、依然として行の折り返しは発生します。

PS U:\PS> $open = (Get-Item .\File1.txt | Get-Member Open)
PS U:\PS> $definition = $open.Definition
PS U:\PS> $definition -replace "\), ",")`r`n"
System.IO.FileStream Open(System.IO.FileMode mode)
System.IO.FileStream Open(System.IO.FileMode mode, System.IO.FileAccess access)
System.IO.FileStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share)
PS U:\PS>
inserted by FC2 system