最初は気付かないかもしれませんが、Windows PowerShell を操作しているということは、実際には .NET Framework オブジェクトを操作していることになります。経験を重ねるうちに、オブジェクト処理の威力を理解できるようになり、オブジェクトを使用していることに気付くと共に、オブジェクト的な考え方をするようになっていると思われます。

技術的に言えば、.NET Framework オブジェクトは、データおよびそのデータに関連付けられている操作から構成される .NET Framework クラスのインスタンスです。言い換えると、オブジェクトとは、プロパティ (特性のようなもの) とメソッド (オブジェクトに対して実行できるアクション) を持つデータ エンティティであると考えることができます。

たとえば、Windows PowerShell でサービスを取得する場合、実際に取得されるのはサービスを表すオブジェクトです。サービスに関する情報を表示しているときは、そのサービス オブジェクトのプロパティを表示しているのです。さらに、サービスを開始したとき、つまり、サービスの Status プロパティが "started" に変化したときは、サービス オブジェクトの 1 つのメソッドを使用しています。

同じ型のすべてのオブジェクトには同じプロパティとメソッドがありますが、同じオブジェクトの各インスタンスではプロパティに異なる値を設定することができます。たとえば、すべてのサービス オブジェクトには、Name プロパティと Status プロパティがあります。ただし、サービスごとに、異なる名前と異なる状態にすることができます。

オブジェクトについて調べるのは簡単です。コマンドレットで取得されるオブジェクトの型を調べるには、パイプライン演算子 (|) を使用して、"get" コマンドの結果を Get-Member コマンドに渡します。たとえば、Get-Service コマンドで取得されたオブジェクトを Get-Member に渡すには、次のコマンドを入力します。

get-service | get-member 

Get-Member を指定すると、サービス オブジェクトに関する情報 (たとえば、オブジェクトの型名や、オブジェクト プロパティとメソッドのリスト) が表示されます。

   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
add_Disposed              Method        System.Void add_Disposed(EventHandler value)
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
...

オブジェクト クラスの詳細を調べるには、コピーおよび貼り付け操作を行って System.ServiceProcess.ServiceController のような型名を MSDN 内で検索します。目的のクラスが見つかったら、MSDN のサブトピックで、そのクラスに基づいているオブジェクト (Windows PowerShell のものなど) のプロパティおよびメソッドを調べます。

特定のオブジェクトのすべてのプロパティの値を調べるには、パイプライン演算子 (|) を使用して、"get" コマンドの結果を Format-List コマンドまたは Format-Table コマンドに渡します。Format 系のコマンドレットの Property パラメーターに、すべてを表す値 (*) を使用します。たとえば、システム上の Schedule サービスのすべてのプロパティを表示するには、次のように入力します。

get-service schedule | format-list -property *

出力結果の例を次に示します。

Name                : Schedule
CanPauseAndContinue : True
CanShutdown         : True
CanStop             : True
DisplayName         : Task Scheduler
DependentServices   : {}
MachineName         : .
ServiceName         : Schedule
ServicesDependedOn  : {RpcSs}
ServiceHandle       : SafeServiceHandle
Status              : Running
ServiceType         : Win32ShareProcess
Site                :
Container           :

Windows PowerShell に関する学習の最初の段階ではオブジェクトについて理解する必要はありませんが、常にこの概念を意識するようにしてください。すぐにオブジェクトを効果的に使用できるようになります。




目次