こんにちは。チェシャ男です。(-皿-)
今回は、
【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
で確認する。
<オブジェクト>の部分にはコマンドレットに置き換えることもできる。
すごく分かりやすかったです。大変為になりました。ありがとうございます。