2007年09月02日

PowerShellのGet-Memberコマンドレットについて

PowerShellでは、Get-Memberコマンドレットでオブジェクトのメンバを取得できます。

PS > $x = "Mojibake"
PS >$x | Get-Member


   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()
CompareTo        Method                System.Int32 CompareTo(Object value),...
Contains         Method                System.Boolean Contains(String value)
CopyTo           Method                System.Void CopyTo(Int32 sourceIndex,...
...以下略

続いて、配列のメンバを調べてみましょう。

PS > $x = 1,2,3
PS > $x -is [Object[]]
True
PS > $x | Get-Member


   TypeName: System.Int32

Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     System.Int32 CompareTo(Int32 value), System.Int32 Com...
Equals      Method     System.Boolean Equals(Object obj), System.Boolean Equ...
GetHashCode Method     System.Int32 GetHashCode()
GetType     Method     System.Type GetType()
GetTypeCode Method     System.TypeCode GetTypeCode()
ToString    Method     System.String ToString(), System.String ToString(IFor...

$xはObject[]なのに、Get-Memberコマンドレットは要素であるInt32のメンバを表示しています。どういうことでしょうか。確認のために、いろいろな型のオブジェクトを混在させた配列に対してメンバを取得してみましょう。

PS > $x = "Hello", 3.14, 256
PS > $x | Get-Member


   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()
CompareTo        Method                System.Int32 CompareTo(Object value),...
...中略
   TypeName: System.Double

Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     System.Int32 CompareTo(Object value), System.Int32 Co...
Equals      Method     System.Boolean Equals(Object obj), System.Boolean Equ...
...中略
   TypeName: System.Int32

Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     System.Int32 CompareTo(Int32 value), System.Int32 Com...
Equals      Method     System.Boolean Equals(Object obj), System.Boolean Equ...
...以下略

どうやら、Get-Memberコマンドレットはパイプラインから配列を渡されると配列の各要素に対してユニークな型ごとにメンバを取得するようです。では、どうすれば配列のメンバを取得できるのでしょうか。

方法は2つあります。1つはGet-Memberコマンドレットの-inputObjectパラメータに明示的にオブジェクトを渡すという方法、もう1つはコンマ演算子を使う方法です。

PS > Get-Member -inputObject $x


   TypeName: System.Object[]

Name               MemberType    Definition
----               ----------    ----------
Count              AliasProperty Count = Length
Address            Method        System.Object& Address(Int32 )
Clone              Method        System.Object Clone()
...以下略

PS > ,$x | Get-Member
...出力は省略

コンマ演算子は以前触れたように、被演算子を要素としてもつ配列を生成します。Get-Memberはパイプラインからの入力を要素ごとに処理するので、配列の配列をパイプラインに流せば配列のメンバを取得できるというわけです。



posted by bakemoji at 00:21| Comment(0) | TrackBack(0) | PowerShell | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。