SWbemServices.ExecQuery メソッド

SWbemServices オブジェクトの ExecQuery メソッドでは、オブジェクトを取得するためのクエリを実行します。 これらのオブジェクトは、返された SWbemObjectSet コレクションを通じて使用できます。

このメソッドは、半同期モードで呼び出されます。 詳細については、メソッドの呼び出しに関するページを参照してください。

この構文の説明については、「スクリプト API のドキュメント規則」を参照してください。

構文

objWbemObjectSet = .ExecQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

パラメーター

strQuery

必須。 クエリのテキストを含む文字列。 このパラメーターを空白にすることはできません。 WMI クエリ文字列の構築の詳細については、「WQL を使用したクエリ」 および 「WQL」を参照してください。

strQueryLanguage [オプション]

使用するクエリ言語を含む文字列。 指定する場合、この値は "WQL" にする必要があります。

iFlags [省略可能]

クエリの動作を決定し、この呼び出しがすぐに返されるかどうかを判断する整数。 このパラメーターの既定値は、wbemFlagReturnImmediately です。 このパラメーターには次の値を指定することができます。

wbemFlagForwardOnly (32 (0x20))

順方向専用の列挙子を返します。 一般的に、順方向専用の列挙子は、従来の列挙子よりもずっと高速で、使用されるメモリが少なくなりますが、SWbemObject.Clone_ の呼び出しは許可されません。

wbemFlagBidirectional (0 (0x0))

クライアントが列挙子を解放するまで、WMI で列挙のオブジェクトへのポインターが保持されます。

wbemFlagReturnImmediately (16 (0x10))

呼び出しはすぐに戻ります。

wbemFlagReturnWhenComplete (0 (0x0))

クエリが完了するまで、この呼び出しをブロックします。 このフラグでは、メソッドを同期モードで呼び出します。

wbemQueryFlagPrototype (2 (0x2))

プロトタイプの作成に使用されます。 このフラグでは、クエリの実行が停止され、通常の結果オブジェクトのように見えるオブジェクトが返されます。

wbemFlagUseAmendedQualifiers (131072 (0x20000))

WMI で基底クラス定義と共にクラス変更データを返すようにします。 詳細については、「WMI クラス情報のローカライズ」を参照してください。

objWbemNamedValueSet [オプション]

通常、これは未定義です。 そうでない場合、これは SWbemNamedValueSet オブジェクトであり、その要素は、要求を処理しているプロバイダーが使用できるコンテキスト情報を表します。 このような情報をサポートする、または必要とするプロバイダーは、認識された値名、値のデータ型、許可された値、セマンティクスを文書化する必要があります。

戻り値

エラーが発生しない場合、このメソッドでは SWbemObjectSet オブジェクトが返されます。 これは、クエリの結果セットを含むオブジェクト コレクションです。 呼び出し元は、使用しているプログラミング言語のコレクションの実装を使ってコレクションを調べることができます。 詳細については、コレクションへのアクセスに関するページを参照してください。

エラー コード

ExecQuery メソッドの完了後に、Err オブジェクトに次のリストのいずれかのエラー コードが含まれる場合があります。

wbemErrAccessDenied - 2147749891 (0x80041003)

現在のユーザーには、結果セットを表示するアクセス許可がありません。

wbemErrFailed - 2147749889 (0x80041001)

未定義のエラーが発生しました。

wbemErrInvalidParameter - 2147749896 (0x80041008)

無効なパラメーターが指定されました。

wbemErrInvalidQuery - 2147749911 (0x80041017)

クエリ構文が無効です。

wbemErrInvalidQueryType - 2147749912 (0x80041018)

要求されたクエリ言語はサポートされていません。

wbemErrOutOfMemory - 2147749894 (0x80041006)

操作を完了させるための十分なメモリがありません。

解説

ExecQuery は、WMI 情報を取得するために最も一般的に使用される呼び出しの 1 つです。 ExecQuery の標準呼び出しは次のようになります。

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'")
For Each objService in colServices
    Return = objService.StopService()
    If Return <> 0 Then
        Wscript.Echo "Failed " &VBNewLine & "Error code = " & Return 
    Else
       WScript.Echo "Succeeded"
    End If
Next

適切な名前空間とセキュリティを表すモニカーを使用して SWbemServices オブジェクトを作成してから、サービスを介して ExecQuery 呼び出しを行うことに注意してください。 詳細については、「WMI スクリプトの作成」と「WMI の列挙」を参照してください。

InstancesOf メソッドと同様に、ExecQuery メソッドでは常に SWbemObjectSet コレクションが返されます。 したがって、ここに示すように、WMI スクリプトでは、コレクション内の各管理対象リソース インスタンスにアクセスするために ExecQuery で返されるコレクションを列挙する必要があります。

strComputer = "."
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colSWbemObjectSet = objSWbemServices.ExecQuery _
   ("SELECT * FROM Win32_Service")
For Each objSWbemObject In colSWbemObjectSet
    Wscript.Echo "Name: " & objSWbemObject.Name
Next

SWbemObjectSet を返す他の SWbemServices メソッドには、AssociatorsOfReferencesTo、および SubclassesOf が含まれます。

クエリで空の結果セットが返されても、エラーではありません。 ExecQuery メソッドでは、strQuery 引数でキー プロパティが要求されているかどうかに関係なく、キー プロパティが返されます。 このメソッドの実行時にエラーが発生し、wbemFlagReturnImmediately フラグを使用しない場合、Err オブジェクトは、返されたオブジェクト セットへのアクセスを試みるまで設定されません。 ただし、wbemFlagReturnWhenComplete フラグを使用すると、ExecQuery メソッドが呼び出されたときに Err オブジェクトが設定されます。

WQL クエリで使用できる AND および OR キーワードの数には制限があります。 複雑なクエリで使用される WQL キーワードの数が多いと、WMI で WBEM_E_QUOTA_VIOLATION エラー コードが HRESULT 値として返されることがあります。 WQL キーワードの制限は、クエリの複雑さによって異なります。

次の VBScript コード例では、ローカル コンピューター上のすべてのディスク ドライブを検索し、デバイス ID とディスク ドライブの種類を表示します。

Set colDisks = GetObject( _
    "Winmgmts:").ExecQuery("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
 
    Select Case objDisk.DriveType
        Case 1
            Wscript.Echo "No root directory. Drive type could not be determined."
        Case 2
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Removable drive" 
        Case 3
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Local hard disk" 
        Case 4
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Network disk" 
        Case 5
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Compact disk" 
        Case 6
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = RAM disk" 
        Case Else
            Wscript.Echo "Drive type could not be determined."
    End Select
Next

要件

要件
サポートされている最小のクライアント
Windows Vista
サポートされている最小のサーバー
Windows Server 2008
Header
Wbemdisp.h
タイプ ライブラリ
Wbemdisp.tlb
[DLL]
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

関連項目

SWbemServices

SWbemServices.Get

WQL を使用したクエリ

WMI スクリプトの作成

WMI の列挙