次の方法で共有


イベント クエリの SELECT ステートメント

さまざまな SELECT ステートメントを使用して、イベント情報のクエリを実行できます。 ステートメントは、基本的なステートメントにすることも、クエリから返される結果セットを絞り込むために制限を厳しくすることもできます。

次の例は、イベント情報のクエリに使用される基本的な SELECT ステートメントです。

SELECT * FROM EventClass

コンシューマーがクエリを送信すると、EventClassによって表されるすべてのイベントの発生を通知する要求です。 この要求には、すべてのイベント システムおよび非システム プロパティに関する通知の要求が含まれます。 イベント プロバイダーは、クエリを送信するときに、EventClass によって表されるイベントが発生したときに通知 生成するためのサポートを登録します。

コンシューマーは、SELECT ステートメントでアスタリスク (*) の代わりに個々のプロパティを指定できます。

次の例は、特定のプロパティを照会する方法を示しています。

SELECT property_1, property_2, property_3 FROM MyEventClass

ただし、クエリで埋め込みオブジェクトのプロパティが指定されている場合でも、埋め込みオブジェクトのすべてのプロパティが返されます。

次の例は、同じデータを返す 2 つのクエリを示しています。

SELECT targetInstance FROM __InstanceCreationEvent within 2
    WHERE targetinstance isa "Win32_Process"
SELECT targetInstance.Name FROM __InstanceCreationEvent within 2
    WHERE targetinstance isa "Win32_Process"

システム プロパティが特定のクエリに関連しない場合は、NULLが含まれます。 たとえば、__RELPATH システム プロパティの値は、すべてのイベント クエリ NULL です。

次のシステム プロパティには、イベント クエリ NULL が含まれています。

\_\_Namespace \_\_Path \_\_RelPath \_\_Server

詳細については、「WMI システム プロパティ リファレンス」を参照してください。

すべてのイベント クエリには、オプションの WHERE 句含めることができますが、WHERE 句は主にコンシューマーによって追加のフィルター処理を指定するために使用されます。 コンシューマーは常に WHERE 句を指定することを強くお勧めします。 複雑なクエリのコストは、不要な通知を配信して処理するコストと比較して最小限です。

次の例は、EmailEvent の架空のクラスに影響を与えるすべてのインスタンス変更イベント通知を要求するクエリを示しています。

SELECT * FROM EmailEvent

EmailEvent に関連付けられているイベントが頻繁に発生する場合、コンシューマーはイベントであふれかけられます。 より優れたクエリでは、特定の条件で、重要度レベルが高い場合など、指定されたクラスのプロパティを使用する場合にのみイベントが要求されます。

次の例は、EmailImportance が EmailEvent クラスのプロパティである場合に使用できるクエリを示しています。

SELECT * FROM EmailEvent WHERE EmailImportance > 3

WMI はさまざまな理由でクエリを拒否できることに注意してください。 たとえば、クエリが複雑すぎる場合や、評価にリソースを大量に消費する場合があります。 この場合、WMI は特定のエラー コード (WBEM_E_INVALID_QUERYなど) を返します。

埋め込みオブジェクトのプロパティは、WHERE 句で使用できます。

次の例は、__InstanceModificationEvent システム クラスの TargetInstance プロパティが埋め込み Win32_LogicalDisk オブジェクトであり、FreeSpace Win32_LogicalDiskのプロパティであるオブジェクト クエリを実行する方法を示しています。

SELECT * FROM __InstanceModificationEvent WITHIN 600
    WHERE TargetInstance ISA "Win32_LogicalDisk" 
    AND   TargetInstance.FreeSpace < 1000000