クラスとインスタンス情報の操作

WMI には、Microsoft PowerShell、Visual Basic Scripting Edition (VBScript) および C++ を使用して WMI クラスとインスタンス情報を取得および操作するためのさまざまな手法が用意されています。

次の表に、WMI クラスとインスタンス情報を取得および操作する手法について説明するトピックを示します。

トピック 説明
WMI クラスまたはインスタンス データの取得 WMI 情報リポジトリとの間でデータを取得して設定します。
インスタンス プロパティの変更 取得後にインスタンス内の情報を変更します。
インスタンスの継承の変更 インスタンスの親クラスを変更します。
メソッドの変更 インスタンスのパラメーターを変更します。
WMI の列挙 WMI オブジェクトを列挙します。
WMI のクエリ WMI オブジェクトのクエリを実行します。
メソッドの呼び出し Microsoft または他のサードパーティ開発者によって作成された関連メソッドを使用して、WMI オブジェクトをさらに操作したり、WMI オブジェクトが表すオブジェクトに直接影響を与えたりします。
コレクションへのアクセス スクリプト内のコレクションを列挙します。

 

VBScript を使用したデータの操作

直接アクセスを使用すると、そのオブジェクトのプロパティ コレクションではなく、SWbemObject 上の WMI クラスまたはインスタンスの WMI プロパティに直接アクセスできます。 SWbemServices.ExecMethod 呼び出しを使用するのではなく、プログラミング言語のネイティブ スタイルでそのオブジェクトに対してメソッドを実行することもできます。 たとえば、Win32_ProcessCreate メソッドには、Windows 2000 では 3 つのパラメーターがありますが、Windows Server 2003 では 4 つのパラメーターがあります。

直接アクセスを使用すると、WMI のプロパティとメソッドを、SWbemObject のオートメーション プロパティとメソッドであるかのように扱うことができます。

次の例は、プロパティにアクセスする方法を示しています。

VolumeName = MyDisk.Properties_("VolumeName")

次の例は、直接アクセスできる場合にプロパティにアクセスする方法を示しています。

VolumeName = MyDisk.VolumeName

オブジェクトのチェーンも許容されます。

次の例は、別のオブジェクトに埋め込まれているオブジェクトのプロパティにアクセスする方法を示しています。

value = MyComputer.MyDisk.VolumeName

次の例は、配列添字表記を使用してプロパティにアクセスする方法を示しています。

valueOfElement = MyDisk.MyArrayProperty(3)

次の VBScript コード例は、Win32_Process クラスの Create メソッドに入力パラメーターのインスタンスを SWbemObject として生成し、入力プロパティを設定してから、SWbemServices.ExecMethod を使用して Create メソッドを実行する方法を示しています。

SWbemObject.Methods_ プロパティは、Win32_Process メソッドの SWbemMethodSet コレクションを返します。 メソッド セットのメンバーは SWbemMethod オブジェクトであり、SWbemMethod.InParametersCreate メソッドの入力パラメーターを返します。 必須の CommandLine 入力パラメーターは "calc.exe" に設定されます。 その後、SWbemServices.ExecMethod によってメソッドが実行され、calc.exe プロセスが起動します。

set Services = GetObject("winmgmts:root\cimv2")
Set obj = Services.Get("Win32_Process")
Set objIns = obj.Methods_("Create").InParameters.SpawnInstance_
objIns.CommandLine = "calc.exe"
Set objOut = Services.ExecMethod("Win32_Process", "Create", objIns)
MsgBox "Return value = " & objOut.returnvalue & VBCRLF & "Process ID = " & objOut.processid

次のコード例は、直接アクセスを使用して前の操作を実行する方法を示しています。

set Services = GetObject("winmgmts:root\cimv2")
Set Obj = Services.Get("Win32_Process")
returnvalue = Obj.create("calc.exe",,,processid)
MsgBox "Return value = " & returnvalue & VBCRLF & "Process ID = " & processid

詳細については、「プロバイダー メソッドの呼び出し」および「SWbemObject を使用したスクリプト」を参照してください。