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
|

|