.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つの定義をコンマで区切ったものです。
- 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> $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>