WHERE 句 (WMI)

WHERE 句を使用して、データ、イベント、またはスキーマ クエリのスコープを絞り込みます。 詳細については、「WQL を使用したクエリ」を参照してください。 WHERE 句は、プロパティまたはキーワード、演算子、および定数で構成されます。 すべての WHERE 句では、Windows Management Instrumentation (WMI) クエリ言語 (WQL) に含まれる定義済みの演算子のいずれかを指定する必要があります。 次のいずれかの形式を使用して、SELECT ステートメントに WHERE 句を追加できます。

SELECT * FROM class WHERE property operator constant
SELECT * FROM class WHERE constant operator property

ここで、 * はクエリ対象の項目、class はクエリを実行するクラス、constant、operator、および property は、使用する定数、演算子、およびプロパティまたはキーワードです。 SELECT ステートメントの詳細については、「データ クエリの SELECT ステートメント」、「イベント クエリの SELECT ステートメント」、または「スキーマ クエリの SELECT ステートメント」を参照してください。

定数の値は、プロパティに対する正しい型である必要があります。 さらに、演算子は有効な WQL 演算子の一覧に含まれている必要があります。 WHERE 句の演算子のいずれかの側にプロパティ名または定数を指定する必要があります。

WHERE 句では、"NTFS" などの文字列リテラルを使用できます。 文字列に次の特殊文字を含める場合は、まず文字の先頭に円記号 (\) を付けて文字をエスケープする必要があります。

  • 円記号 (\)
  • 二重引用符 (")
  • 単一引用符 (')

任意の算術式は使用できません。 たとえば、次のクエリでは、NTFS ドライブを表す Win32_LogicalDisk クラスのインスタンスのみが返されます。

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

プロパティ名を演算子の両側に指定することはできません。 次のクエリは、無効なクエリの例です。

SELECT * FROM PhysicalDisk WHERE Partitions < (4 + 7 - 2) 
    OR   (Partitions = SectorsPerTrack / 7)

WHERE 句のクラス記述子のほとんどの使用では、WMI によってクエリに無効のフラグが設定され、エラーが返されます。 ただし、WMI の型 object のプロパティにはドット (.) 演算子を使用します。 たとえば、Prop が MyClass の有効なプロパティで、型が object の場合、次のクエリは有効です。

SELECT * FROM MyClass WHERE Prop.embedprop = 5

比較テストでは、常に大文字と小文字が区別されません。 つまり、次の 3 つのステートメントはすべて TRUE と評価されます。

SELECT * FROM MyClass WHERE Prop1 = "cat"
SELECT * FROM MyClass WHERE Prop1 = "CAT"
SELECT * FROM MyClass WHERE Prop1 = "cAt"

ブール型のデータ型を含むクエリを作成できますが、有効なブール オペランドの型は =、!=、および <> 型だけです。 値 TRUE は数値 1 と等価で、値 FALSE は数値 0 と等価です。 ブール値を値 TRUE または FALSE と比較するクエリの例を次に示します。

SELECT * FROM MyClass WHERE BoolProp = 1
SELECT * FROM MyClass WHERE BoolProp = TRUE
SELECT * FROM MyClass WHERE BoolProp <> FALSE
SELECT * FROM MyClass WHERE BoolProp = 0
SELECT * FROM MyClass WHERE BoolProp = FALSE
SELECT * FROM MyClass WHERE BoolProp != 1
SELECT * FROM MyClass WHERE BoolProp != FALSE
SELECT * FROM MyClass WHERE BoolProp <> FALSE

次の例は、無効なオペランドを使用しようとする無効なクエリです。

SELECT * FROM MyClass WHERE BoolProp <= TRUE
SELECT * FROM MyClass WHERE BoolProp >= 0
SELECT * FROM MyClass WHERE BoolProp > FALSE
SELECT * FROM win32_computersystem WHERE infraredsupported >= null

WHERE 句では、論理演算子とかっこで囲まれた部分式を使用して、複数のプロパティ、演算子、および定数のグループを組み合わせることができます。 次のクエリに示すように、各グループは AND、OR、または NOT 演算子で結合する必要があります。 最初のクエリは、Name プロパティが C または D に設定された Win32_LogicalDisk クラスのすべてのインスタンスを取得します。

SELECT * FROM Win32_LogicalDisk WHERE Name = "C:" OR Name = "D:"

2 番めのクエリは、一定の空き領域が残っていて、NTFS ファイル システムがある場合にのみ、"C:" または "D:" という名前のディスクを取得します。

SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:") 
    AND  FreeSpace > 2000000  AND   FileSystem = "NTFS"

WHERE 句を使用したスキーマ クエリを次の例に示します。

SELECT * FROM meta_class WHERE __this ISA "myClassName"

クラス meta_class はこれをスキーマ クエリとして識別し、__this という名前のプロパティはクエリのターゲット クラスを識別し、ISA 演算子はターゲット クラスのサブクラスの定義を要求します。 このため、上記のクエリは、myClassName クラスの定義とそのすべてのサブクラスの定義を返します。

WHERE で ASSOCIATORS OF ステートメントを使用するデータ クエリを次の例に示します。

ASSOCIATORS OF {myClass.keyVal="Value1"} WHERE ClassDefsOnly

ASSOCIATORS OF と WHERE を使用するスキーマ クエリを次の例に示します。

ASSOCIATORS OF {myClass} WHERE SchemaOnly

REFERENCES OF ステートメント と WHERE を使用するデータ クエリを次の例に示します。

REFERENCES OF {myClass.keyVal="Value1"} 
    WHERE RequiredQualifier = myQual

この最後の例は、REFERENCES OF と WHERE を使用するスキーマ クエリです。

REFERENCES OF {myClass} WHERE SchemaOnly

WQL WHERE 句は、WMI の DATETIME 形式に加えて、他のいくつかの日付と時刻の形式をサポートします。