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
ここで* はクエリ対象の項目です。クラスはクエリを実行するクラスで、定数、演算子、およびプロパティは、使用する定数、演算子、およびプロパティまたはキーワードです。 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 で オブジェクト型のプロパティには、ドット (.) 演算子を使用します。 たとえば、Prop が MyClass の有効なプロパティであり、オブジェクト型である場合、次のクエリは有効です。
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 番目のクエリでは、"C:" または "D:" という名前のディスクが取得されるのは、一定の空き領域が残っていて、NTFS ファイル システムがある場合のみです。
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
WMI DATETIME 形式に加えて、WQL WHERE 句では、他のいくつかの日付と時刻の形式がサポートされています。