【Get-Member】PowerShellでメソッドやプロパティを調べる方法

こんにちは。チェシャ男です。(-皿-)

今回は、

【PowerShell でメソッドやプロパティを調べる方法】

について紹介します。

. (ドット演算子)“を使ってプロパティを指定しようとしたら「プロパティ名、ど忘れした!」なんて事が時々あるかと思います。 そんな時プロパティ名を素早く確認できる便利なコマンドレット “Get-Member” について解説します。

また、「メソッド?プロパティ?」という場合ために、それぞれの言葉の意味も本記事内で解説します。

  Get-Member でメソッド・プロパティを確認

オブジェクトのメソッドやプロパティを参照するコマンドレットに、

Get-Member

といものがあります。

【コマンドレット】

Get-Member

【オプション】

-Name    <メンバー名>
-InputObject <オブジェクト>
-MemberType <メンバーの種類>
-View     <メンバーの型>
-Static
-Force

【入力】

System.Management.Automation.PSObject

【出力】

Microsoft.PowerShell.Commands.MemberDefinition

【エイリアス】

gm

「メソッドとプロパティの違い」と「オブジェクトとの関係」

プロパティとは、

“オブジェクト”の性質や属性を表すデータ

を指します。また、メソッドとは、

オブジェクトが持っているデータ処理操作

の事を指します。

オブジェクトについては PowerShellへの入門記事 で少し触れていますが、

オブジェクトは”プロパティ“と”メソッド“の集合体

と言えます。

図でかなりざっくりと表現するならこんな感じです。

オブジェクトのイメージ-チェシャわら

難しい言葉が並んでよくわからないかもしれないので、日常生活に置き換えてみます。

周りを見渡してみてください。

  • テレビ
  • エアコン
  • 冷蔵庫
  • 電子レンジ …

などなど、様々な”モノ“に溢れています。この”モノ“という1つ1つの物体を、オブジェクト(インスタンス)だと思ってください。

例えばテレビはリモコンで、

  • 電源を入れて映像を映す
  • チャンネルを変える
  • 音量を調節する

などの操作が行えます。

また、電子レンジはツマミで、

  • 冷凍食品を解凍する
  • お弁当を温める
  • クッキーを焼く

なんてことも可能です。

こういったオブジェクトに対するそれぞれの”操作“がメソッドです。この操作で出来ることが、それぞれの”モノ(オブジェクト)“の機能とも言えます。

メソッドの特徴は、

中でどんな処理が行われているかわからなくても操作ができる

という点です。

「リモコンのボタンを押す」、「電子レンジのツマミを回す」という操作を行うだけで期待する結果は得られますからね。

また、テレビや電子レンジには、

  • 製造元
  • 型番やモデル名
  • 消費電力
  • 色や形
  • 設置場所
  • チャンネル

など、それぞれに固有の情報があります。この”固有の情報“が、”モノ”が持つ”情報(データ)“つまりオブジェクトが持つプロパティというわけです。

またプロパティは、

「変更できるプロパティ」と「変更できないプロパティ」

の2つに分けることができます。上の例で言うと、”設置場所”や”チャンネル”なんかは簡単に変更できますね。

オブジェクトでは、メソッドを使ってプロパティを変更することができるんです。

今回の例えで言うと、

テレビ2chから4chリモコンで切り替える

というプロパティ変更を例にするとします。

テレビ  = オブジェクト
2ch    = 変更前プロパティ
4ch    = 変更後プロパティ
切り替える = メソッド

という関係を持っています。

これらの”プロパティ“と”メソッド“を合わせて”メンバー“と呼びます。だからコマンドレットも、「Get(ゲット)-Member(メンバー)」なんですね。

Get-Member を実行してメンバーを参照する

では、実際に Get-Member コマンドレットを実行してみましょう。

今回は、「1 , 2 , 3」という数値が入った配列「$Array」を使ってメンバーを確認してみます。

PS C:\> #オブジェクトを作成
PS C:\> $Array = @(1,2,3)

PS C:\> #メンバーを確認
PS C:\> Get-Member -InputObject $Array


    TypeName: System.Object[]

Name           MemberType            Definition
 ----           ----------            ----------
 Count          AliasProperty         Count = Length
 Add            Method                int IList.Add(System.Object value)
 Address        Method                System.Object&, mscorlib, Version=4.0.0.0, Culture=neutral,...
 Clear          Method                void IList.Clear()
 Clone          Method                System.Object Clone(), System.Object ICloneable.Clone()
 CompareTo      Method                int IStructuralComparable.CompareTo(System.Object other, Sy...
 Contains       Method                bool IList.Contains(System.Object value)
 CopyTo         Method                void CopyTo(array array, int index), void CopyTo(array arra...
 Equals         Method                bool Equals(System.Object obj), bool IStructuralEquatable.E...
 Get            Method                System.Object Get(int )
 GetEnumerator  Method                System.Collections.IEnumerator GetEnumerator(), System.Coll...
 GetHashCode    Method                int GetHashCode(), int IStructuralEquatable.GetHashCode(Sys...
 GetLength      Method                int GetLength(int dimension)
 GetLongLength  Method                long GetLongLength(int dimension)
 GetLowerBound  Method                int GetLowerBound(int dimension)
 GetType        Method                type GetType()
 GetUpperBound  Method                int GetUpperBound(int dimension)
 GetValue       Method                System.Object GetValue(Params int[] indices), System.Object...
 IndexOf        Method                int IList.IndexOf(System.Object value)
 Initialize     Method                void Initialize()
 Insert         Method                void IList.Insert(int index, System.Object value)
 Remove         Method                void IList.Remove(System.Object value)
 RemoveAt       Method                void IList.RemoveAt(int index)
 Set            Method                void Set(int , System.Object )
 SetValue       Method                void SetValue(System.Object value, int index), void SetValu...
 ToString       Method                string ToString()
 Item           ParameterizedProperty System.Object IList.Item(int index) {get;set;}
 IsFixedSize    Property              bool IsFixedSize {get;}
 IsReadOnly     Property              bool IsReadOnly {get;}
 IsSynchronized Property              bool IsSynchronized {get;}
 Length         Property              int Length {get;}
 LongLength     Property              long LongLength {get;}
 Rank           Property              int Rank {get;}
 SyncRoot       Property              System.Object SyncRoot {get;}

実行結果を見て頂くと、”MemberType” 列には Method(メソッド)Property(プロパティ)が確認できます。

その他にも、”AliasProperty” や “ParameterizedProperty” というメンバーが存在しますが、これらは”プロパティの別名“や”引数付のプロパティ“でありプロパティの一種と考えてください。

結果として得られたメンバーを”. (ドット演算子)“を経由して使用することで、配列$Array に様々な操作を行うことができます。

PS C:\> #要素数を確認
PS C:\> $Array.Count
 3

PS C:\> #"1"番目の要素を確認
PS C:\> $Array.GetValue(1)
 2

オブジェクト(コレクション)の中のオブジェクトのメンバーを参照する

先ほどは配列のメンバーを確認しました。

配列は、”コレクションオブジェクト“というオブジェクトの1つです。コレクションを簡単に説明すると、「オブジェクトをまとめたオブジェクト」の事を言います。

つまり、配列の中の要素も1つのオブジェクトなんです。

では、

コレクションのオブジェクトのメンバーを参照するにはどうすればいいのでしょうか…

実は、この場合

オブジェクトのコレクションを”| (パイプライン)”で渡す

ことで参照することができます。

言葉で説明すると非常にわかりにくいですが、要は「配列を丸ごと”|”で渡す」ということです。

実際に実行時の様子を見てみましょう。

PS C:\> #要素のメンバーを確認する
PS C:\> $Array | Get-Member


    TypeName: System.Int32

Name        MemberType Definition
 ----        ---------- ----------
 CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value), int ICompar...
 Equals      Method     bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int...
 GetHashCode Method     int GetHashCode()
 GetType     Method     type GetType()
 GetTypeCode Method     System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
 ToBoolean   Method     bool IConvertible.ToBoolean(System.IFormatProvider provider)
 ToByte      Method     byte IConvertible.ToByte(System.IFormatProvider provider)
 ToChar      Method     char IConvertible.ToChar(System.IFormatProvider provider)
 ToDateTime  Method     datetime IConvertible.ToDateTime(System.IFormatProvider provider)
 ToDecimal   Method     decimal IConvertible.ToDecimal(System.IFormatProvider provider)
 ToDouble    Method     double IConvertible.ToDouble(System.IFormatProvider provider)
 ToInt16     Method     int16 IConvertible.ToInt16(System.IFormatProvider provider)
 ToInt32     Method     int IConvertible.ToInt32(System.IFormatProvider provider)
 ToInt64     Method     long IConvertible.ToInt64(System.IFormatProvider provider)
 ToSByte     Method     sbyte IConvertible.ToSByte(System.IFormatProvider provider)
 ToSingle    Method     float IConvertible.ToSingle(System.IFormatProvider provider)
 ToString    Method     string ToString(), string ToString(string format), string ToString(System...
 ToType      Method     System.Object IConvertible.ToType(type conversionType, System.IFormatProv...
 ToUInt16    Method     uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
 ToUInt32    Method     uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
 ToUInt64    Method     uint64 IConvertible.ToUInt64(System.IFormatProvider provider)

ご覧のように、実行結果は大きく変わっています。

“TypeName” も先ほどは「System.Object[]」であったのに対し「System.Int32」となっており参照元が変化していることがわかりますね。

他のコマンドレットの結果オブジェクトのメンバーも確認できる

Get-Member でメンバーを確認する際、最も使うことが多いのはこの使い方かもしれませんね。

他のコマンドレットを実行し、その実行結果を “| (パイプライン)” で渡すことでメンバーを参照することができます。

今回は、日付を取得する”Get-Date“コマンドレットの実行結果のメンバーを参照してみましょう。

PS C:\> #日付を取得するコマンドレット
PS C:\> Get-Date

2016年10月26日 20:25:17

PS C:\>#メンバーを参照してみる
PS C:\> Get-Date |  Get-Member


    TypeName: System.DateTime

Name                 MemberType     Definition
 ----                 ----------     ----------
 Add                  Method         datetime Add(timespan value)
 AddDays              Method         datetime AddDays(double value)
 AddHours             Method         datetime AddHours(double value)
 AddMilliseconds      Method         datetime AddMilliseconds(double value)
 AddMinutes           Method         datetime AddMinutes(double value)
 AddMonths            Method         datetime AddMonths(int months)
 AddSeconds           Method         datetime AddSeconds(double value)
 AddTicks             Method         datetime AddTicks(long value)
 AddYears             Method         datetime AddYears(int value)
 CompareTo            Method         int CompareTo(System.Object value), int CompareTo(datetime v...
 Equals               Method         bool Equals(System.Object value), bool Equals(datetime value...
 GetDateTimeFormats   Method         string[] GetDateTimeFormats(), string[] GetDateTimeFormats(S...
 GetHashCode          Method         int GetHashCode()
 GetObjectData        Method         void ISerializable.GetObjectData(System.Runtime.Serializatio...
 GetType              Method         type GetType()
 GetTypeCode          Method         System.TypeCode GetTypeCode(), System.TypeCode IConvertible....
 IsDaylightSavingTime Method         bool IsDaylightSavingTime()
 Subtract             Method         timespan Subtract(datetime value), datetime Subtract(timespa...
 ToBinary             Method         long ToBinary()
 ToBoolean            Method         bool IConvertible.ToBoolean(System.IFormatProvider provider)
 ToByte               Method         byte IConvertible.ToByte(System.IFormatProvider provider)
 ToChar               Method         char IConvertible.ToChar(System.IFormatProvider provider)
 ToDateTime           Method         datetime IConvertible.ToDateTime(System.IFormatProvider prov...
 ToDecimal            Method         decimal IConvertible.ToDecimal(System.IFormatProvider provider)
 ToDouble             Method         double IConvertible.ToDouble(System.IFormatProvider provider)
 ToFileTime           Method         long ToFileTime()
 ToFileTimeUtc        Method         long ToFileTimeUtc()
 ToInt16              Method         int16 IConvertible.ToInt16(System.IFormatProvider provider)
 ToInt32              Method         int IConvertible.ToInt32(System.IFormatProvider provider)
 ToInt64              Method         long IConvertible.ToInt64(System.IFormatProvider provider)
 ToLocalTime          Method         datetime ToLocalTime()
 ToLongDateString     Method         string ToLongDateString()
 ToLongTimeString     Method         string ToLongTimeString()
 ToOADate             Method         double ToOADate()
 ToSByte              Method         sbyte IConvertible.ToSByte(System.IFormatProvider provider)
 ToShortDateString    Method         string ToShortDateString()
 ToShortTimeString    Method         string ToShortTimeString()
 ToSingle             Method         float IConvertible.ToSingle(System.IFormatProvider provider)
 ToString             Method         string ToString(), string ToString(string format), string To...
 ToType               Method         System.Object IConvertible.ToType(type conversionType, Syste...
 ToUInt16             Method         uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
 ToUInt32             Method         uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
 ToUInt64             Method         uint64 IConvertible.ToUInt64(System.IFormatProvider provider)
 ToUniversalTime      Method         datetime ToUniversalTime()
 DisplayHint          NoteProperty   DisplayHintType DisplayHint=DateTime
 Date                 Property       datetime Date {get;}
 Day                  Property       int Day {get;}
 DayOfWeek            Property       System.DayOfWeek DayOfWeek {get;}
 DayOfYear            Property       int DayOfYear {get;}
 Hour                 Property       int Hour {get;}
 Kind                 Property       System.DateTimeKind Kind {get;}
 Millisecond          Property       int Millisecond {get;}
 Minute               Property       int Minute {get;}
 Month                Property       int Month {get;}
 Second               Property       int Second {get;}
 Ticks                Property       long Ticks {get;}
 TimeOfDay            Property       timespan TimeOfDay {get;}
 Year                 Property       int Year {get;}
 DateTime             ScriptProperty System.Object DateTime {get=if ((& { Set-StrictMode -Version...


PS C:\> #Hour(時間)プロパティを参照
PS C:\> (Get-Date).Hour
20

PS C:\>#DayOfWeek(曜日)プロパティを参照
PS C:\> (Get-Date).DayOfWeek
 Wednesday

このように、コマンドレットの実行結果からもメンバーを参照することができ、実際に“.演算子“を使って操作することができます。

“TypeName” が「System.DateTime」とあるように、PowerShellではデータを”System.○○“というオブジェクトとして扱おうとします。

ですので、Get-Member コマンドレットを用いることであらゆるデータ・出力のメンバーを確認することができます。

覚えることが苦手な人にとっては、すごく便利なコマンドレットですね~

まとめ

メンバーとは、”メソッド“と”プロパティ“の事である。

オブジェクトのメンバーを参照したいときは

Get-Member -InputObject <オブジェクト>

または、

<オブジェクト> | Get-Member

で確認する。

<オブジェクト>の部分にはコマンドレットに置き換えることもできる。

1 COMMENT

もけもけ

すごく分かりやすかったです。大変為になりました。ありがとうございます。

返信する

コメントを残す

メールアドレスが公開されることはありません。