SWbemObject を使用したスクリプト作成

SWbemObject スクリプト オブジェクトは、汎用 WMI オブジェクトであり、SWbemObject オブジェクトがバインドされている特定の WMI オブジェクトに関係なく使用できるプロパティとメソッドを定義するために使用できます。 Win32_Process やその他の WMI データ クラスのインスタンスなど、すべての WMI オブジェクトは、SWbemObject によって表され、独自の特定のプロパティやメソッドに加え、SWbemObject の共通プロパティやメソッドの使用が可能です。

たとえば、次のスクリプトを使用して、SWbemObject.Instances_ メソッドを呼び出して、Win32_Process のすべてのインスタンスを取得します。 clsobjProcess は、Win32_Process クラス定義と SWbemObject の両方を表します。

strComputer = "."
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set clsobjProcess = objWMIServices.Get("Win32_Process")
Set colProcesses = clsobjProcess.Instances_()
For Each Process in colProcesses
    WScript.Echo Process.Name
Next

次の例では、Alerter サービスを表す Win32_Service の特定のインスタンスを取得して、それを objAlerter に格納します。 次に、WScript.Echo objAlerter.Path_ などの SWbemObject メソッド、または WScript.Echo objAlerter.State などのデータ クラスによって定義されるメソッドのいずれかを呼び出すことができます。 Win32_Service と SWbemObject の両方を表す objAlerter。

strComputer = "." 
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set objAlerter = objWMIServices.Get("Win32_Service.Name='Alerter'")
WScript.Echo objAlerter.Path_
objAlerter.StopService()
WScript.Echo objAlerter.State
For each Prop in myObject.Properties_
    Wscript.Echo Prop.Name
Next

SWbemObject.Instances_ を呼び出すと、別の汎用 WMI スクリプト オブジェクト SWbemObjectSet が取得されます。 次に示すように、SWbemObjectSet オブジェクトは、コレクションとして扱うことができます。

Set clsobjProcess = objWMIServices.Get("Win32_Process")

SWbemObject.Instances_ のように、SWbemObject メソッドはすべてアンダースコア (_) で終わるため、判別できます。

SWbemObjectEx によって、SWbemObject のプロパティが拡張されます。 たとえば、SWbemObjectEx.Refresh_ を呼び出すことで、Win32_Process のインスタンスなど、WMI オブジェクトのデータを更新できるようになりました。

次の例では、システム プロセス ページの障害データを 5 秒ごとに更新する方法を示しています。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'System'",,48) 
For Each Process in colProcesses
        i = 0
        Do Until i = 5
            i = i + 1
            Wscript.Echo "PageFaults = " & Process.PageFaults 
            Wscript.Sleep 10000
            Process.Refresh_
        Loop
Next

SWbemRefresher オブジェクトを使用したデータの更新に関する詳細については、「スクリプト内の WMI データの更新」を参照してください。

SWbemObject.Put_PutAsync_ を使用すると、変更を WMI オブジェクトに書き戻すことができます。 これらのメソッドは、オブジェクトが作成された名前空間内のオブジェクトに対する変更のみをコミットします。 SWbemServicesEx.Put または SWbemServicesEx.PutAsync を使用して、別の名前空間にオブジェクトを書き込むことができます。

WMI 用スクリプト API

WMI スクリプトの作成

インスタンス全体の更新

メソッドの呼び出し