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およびサブクラスOf があります。

クエリが空の結果セットを返してもエラーではありません。 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
ヘッダー
Wbemdisp.h
タイプ ライブラリ
Wbemdisp.tlb
[DLL]
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

関連項目

SWbemServices

SWbemServices.Get

WQL を使用したクエリ

WMI スクリプトの作成

WMI の列挙