Get-Memberの使い方:オブジェクトのプロパティやメソッドを確認する

広告

PowerShell では、すべてのデータがオブジェクトとして扱われます。そのため、コマンドの結果にどのような情報が含まれているかを確認することが重要です。 Get-Member コマンドレットを使用すると、オブジェクトが持つプロパティやメソッドを確認できます。ここでは PowerShell における Get-Member コマンドレットの使い方について解説します。

Get-Memberコマンドレットの書式

Get-Member コマンドレットは、オブジェクトが持つプロパティやメソッドを確認するために使用するコマンドレットです。 Get-Member コマンドレットの書式は次の通りです。

Get-Member
  [-InputObject <PSObject>]
  [[-Name] <String[]>]
  [-MemberType <PSMemberTypes>]
  [-View <PSMemberViewTypes>]
  [-Static]
  [-Force]
  [<CommonParameters>]

Get-Member はエイリアスとして gm が定義されています。

gm -> Get-Member

他のコマンドによって生成されたオブジェクトのプロパティやメソッドを調べるには、パイプ(|)を使って次のように実行します。

コマンド | Get-Member

それでは実際に試してみます。 Get-Command コマンドレットが返すオブジェクトについて調べるには、次のように実行してください。

Get-Command | Get-Member

オブジェクトのプロパティやメソッドの一覧が表示されます。

Get-Memberコマンドレットの使い方(1)

一部を抜粋すると次のようになります。

PS C:\code\powershell> Get-Command | Get-Member

   TypeName: System.Management.Automation.AliasInfo

Name                MemberType     Definition
----                ----------     ----------
Equals              Method         bool Equals(System.Object obj)
GetHashCode         Method         int GetHashCode()
GetType             Method         type GetType()

(途中略)

CommandType         Property       System.Management.Automation.CommandType…
Definition          Property       string Definition {get;}
Description         Property       string Description {get;set;}

(途中略)

DisplayName         ScriptProperty System.Object DisplayName {get=if ($null…
HelpUri             ScriptProperty System.Object HelpUri {get=$oldProgressP…
ResolvedCommandName ScriptProperty System.Object ResolvedCommandName {get=$…

   TypeName: System.Management.Automation.FunctionInfo

Name                MemberType     Definition
----                ----------     ----------
Equals              Method         bool Equals(System.Object obj)
GetHashCode         Method         int GetHashCode()
GetType             Method         type GetType()

(途中略)

CmdletBinding       Property       bool CmdletBinding {get;}
CommandType         Property       System.Management.Automation.CommandType…
DefaultParameterSet Property       string DefaultParameterSet {get;}

(途中略)

HelpUri             ScriptProperty System.Object HelpUri {get=$oldProgressP…

   TypeName: System.Management.Automation.CmdletInfo

Name                MemberType     Definition
----                ----------     ----------
Equals              Method         bool Equals(System.Object obj)
GetHashCode         Method         int GetHashCode()
GetType             Method         type GetType()

(途中略)

CommandType         Property       System.Management.Automation.CommandType…
DefaultParameterSet Property       string DefaultParameterSet {get;}
Definition          Property       string Definition {get;}

(途中略)

DLL                 ScriptProperty System.Object DLL {get=$this.Implementin…
HelpUri             ScriptProperty System.Object HelpUri {get=$oldProgressP…

表示された結果を見ると、TypeName: xxx が 3 種類表示されています。これは、Get-Command が複数の種類のオブジェクト(エイリアス、関数、コマンドレットなど)を返しているためです。それぞれメソッド(Method)とプロパティ(Property)の一覧が表示されています。(ScriptProperty はスクリプトによって定義されたプロパティです)。

TypeName: xxx で表示されているのが、オブジェクトの種類(クラス)です。今回は Get-Command コマンドレットが返すオブジェクトのメソッドとプロパティを調べましたので、 Get-Command は複数の種類のオブジェクトを返していることが分かります。それぞれのクラスごとに、メソッドとプロパティが表示されています。

表示する種類を指定する

Get-Member を使うと、オブジェクトのメソッドやプロパティを取得できますが、 -MemberType オプションを使用することで表示する種類を指定することができます。

コマンド | Get-Member -MemberType 種類

指定可能な種類は次の通りです。明示的に指定しない場合は、すべての種類(All)が表示されます。

AliasProperty  : プロパティの別名
CodeProperty   : .NETによって定義されたプロパティ
Property       : プロパティ
NoteProperty   : メモ
ScriptProperty : スクリプトによって定義されたプロパティ
Properties     : プロパティをまとめたグループ
PropertySet    : 複数のプロパティをあらかじめまとめたもの
Method         : メソッド
CodeMethod     : .NETによって定義されたメソッド
ScriptMethod   : スクリプトによって定義されたメソッド
Methods        : メソッドをまとめたグループ
ParameterizedProperty : 引数があるプロパティ
MemberSet      : メソッドやプロパティをまとめたもの
Event          : イベント
Dynamic        : 動的に作成されるメソッドやプロパティ
All            : すべての種類

それでは種類として Method だけを取得してみます。次のように実行してください。

Get-Command | Get-Member -MemberType Method

種類が Method のものだけが表示されます。

Get-Memberコマンドレットの使い方(2)

このように種類を指定して情報を取得できます。

非公開のメンバーを表示する

オブジェクトにはユーザーが利用することを想定していないメソッドやプロパティなどがあり、 Get-Member を使っても表示されることはありませんが、 -Force オプションを指定すると、通常は表示されない内部メンバーも含めて表示されます。

コマンド | Get-Member -Force

それでは実際に試してみます。次のように実行してください。

Get-Command | Get-Member -Force

通常は表示されない情報も含めて表示されます。

Get-Memberコマンドレットの使い方(3)

一部を抜粋すると次のようになります。

PS C:\code\powershell> Get-Command | Get-Member -Force

   TypeName: System.Management.Automation.AliasInfo

Name                   MemberType     Definition
----                   ----------     ----------
Namespace              AliasProperty  Namespace = ModuleName
pstypenames            CodeProperty   System.Collections.ObjectModel.Collec…
psadapted              MemberSet      psadapted {ReferencedCommand, Resolve…
psbase                 MemberSet      psbase {ReferencedCommand, ResolvedCo…
psextended             MemberSet      psextended {HelpUri, ResolvedCommandN…
psobject               MemberSet      psobject {Members, Properties, Method…
Equals                 Method         bool Equals(System.Object obj)
GetHashCode            Method         int GetHashCode()
GetType                Method         type GetType()
get_CommandType        Method         System.Management.Automation.CommandT…
get_Definition         Method         string get_Definition()
get_Description        Method         string get_Description()

(途中略)

CommandType            Property       System.Management.Automation.CommandT…
Definition             Property       string Definition {get;}
Description            Property       string Description {get;set;}
Module                 Property       psmoduleinfo Module {get;}
ModuleName             Property       string ModuleName {get;}

(途中略)

DisplayName            ScriptProperty System.Object DisplayName {get=if ($n…
HelpUri                ScriptProperty System.Object HelpUri {get=$oldProgre…
ResolvedCommandName    ScriptProperty System.Object ResolvedCommandName {ge…

これらの情報は通常の操作ではあまり使用しませんが、内部の動作を詳しく調べる場合や、トラブルシューティングの際に役立つことがあります。

-- --

PowerShell における Get-Member コマンドレットの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。