イベント クエリの 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