WMIの使い方

メモ:

MSDN Libraryに WMI による Windows の管理 というページがあります。まず、WMIを使う手順を順番に見ていきます。

読みすすめていくと、システムの全サービスの一覧表示という項目があります。そのソースをまず見ていきます。(このドキュメントを読んだ方がいいかも)

Set ServiceSet = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_Service")
for each Service in ServiceSet
  WScript.Echo Service.Description
Next

まず、GetObject()関数でオブジェクトを取得しています。VBScriptでは、オブジェクトを作成、取得するのにCreateObject()またはGetObject()関数を使用します。

CreateObject()は、インスタンスを作成するのに対しGetObject()は、オブジェクトが存在している場合は、それを取得し存在していない場合、インスタンスを作成します。

上記例の場合、次の部分で** SWbemServices **オブジェクトを作成しています。

GetObject("winmgmts:{impersonationLevel=impersonate}")

次に、InstancesOf()関数でWin32_ServiceのインスタンスのリストであるSWbemObjectSetを取得します。ここで取得しているのは、WMI Classesと呼ばれるもので各情報単位のオブジェクトが取得されてきます。このクラスを差し替えることで違った情報を取得することができます。

.InstancesOf("Win32_Service")

for eachで順にDescriptionを出力しています。

GetObject()関数の引数は、少しややこしく対象を何にするかや偽装レベル(アクセスの可否)などモニカと呼ばれる文字列を設定します。上記例の{impersonationLevel=impersonate}は 偽装レベルの指定になります。(MSDN:Constructing a Moniker String)