Clause WHERE (WMI)

La clause WHERE permet de restreindre l’étendue d'une requête de données, d’un événement ou de schéma. Pour plus d'informations, consultez Interroger avec WQL. La clause WHERE est composée d’une propriété ou d’un mot clé, d’un opérateur et d’une constante. Toutes les clauses WHERE doivent spécifier l’un des opérateurs prédéfinis inclus dans le langage de requête WQL (Windows Management Instrumentation). Vous pouvez appliquer la clause WHERE à l’instruction SELECT à l’aide de l’un des formulaires suivants :

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

où * est l’élément interrogé, classe est la classe dans laquelle interroger, et constante, opérateur et propriété sont la constante, l’opérateur et la propriété ou mot clé à utiliser. Pour plus d’informations sur l’instruction SELECT, consultez Instruction SELECT pour les requêtes de données, Instructions SELECT pour les requêtes d’événement ou Instructions SELECT pour les requêtes de schéma.

La valeur de la constante doit être du bon type pour la propriété. De plus, l’opérateur doit figurer dans la liste des opérateurs WQL valides. Un nom de propriété ou une constante doit apparaître de chaque côté de l’opérateur dans la clause WHERE.

Vous pouvez utiliser des littéraux de chaîne, tels que « NTFS », dans une clause WHERE. Si vous souhaitez inclure les caractères spéciaux suivants dans votre chaîne, vous devez d’abord éviter le caractère en le précédant d’une barre oblique inverse (\) :

  • barre oblique inverse (\)
  • guillemets doubles (")
  • guillemets simples (')

Les expressions arithmétiques arbitraires ne peuvent pas être utilisées. Par exemple, la requête suivante retourne uniquement les instances de la classe Win32_LogicalDisk qui représentent les lecteurs NTFS :

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Les noms de propriétés ne peuvent pas apparaître des deux côtés de l’opérateur. La requête suivante est un exemple de jointure interne :

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

Pour la plupart des utilisations de descripteurs de classe dans une clause WHERE, WMI signale la requête comme non valide et retourne une erreur. Toutefois, utilisez l’opérateur dot (.) pour les propriétés de l’objet de type dans WMI. Par exemple, la requête suivante est valide si Prop est une propriété valide de MyClass et est un objet de type :

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Les tests de comparaison ne respectent toujours pas la casse. Autrement dit, les trois instructions suivantes sont toutes évaluées à TRUE :

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

Vous pouvez construire une requête qui inclut des types de données booléens, mais les seuls types d’opérande booléens valides sont les types =, != et <> . La valeur TRUE est équivalente au chiffre 1, et la valeur FALSE est équivalente au chiffre 0. Les exemples suivants sont des requêtes qui comparent une valeur booléenne aux valeurs TRUE ou 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

Les exemples suivants sont des requêtes non valides qui tentent d’utiliser des opérandes non valides.

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

Plusieurs groupes de propriétés, d’opérateurs et de constantes peuvent être combinés dans une clause WHERE à l’aide d’opérateurs logiques et de sous-expressions entre parenthèses. Chaque groupe doit être joint aux opérateurs AND, OR ou NOT, comme indiqué dans les requêtes suivantes. La première requête récupère toutes les instances de la classe Win32_LogicalDisk avec la propriété Name définie sur C ou D :

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

La deuxième requête récupère les disques nommés « C: » ou « D: » uniquement s’ils disposent d’une certaine quantité d’espace libre restant et de systèmes de fichiers NTFS :

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

Cet exemple montre une requête de schéma utilisant la clause WHERE.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

La classe meta_class l’identifie comme une requête de schéma, la propriété appelée __this identifie la classe cible de la requête et l’opérateur ISA demande des définitions pour les sous-classes de la classe cible. Par conséquent, la requête précédente retourne la définition de la classe myClassName et les définitions de toutes ses sous-classes.

L'exemple suivant est une requête de données utilisant l'instruction ASSOCIATEURS DE avec WHERE :

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

L’exemple suivant montre une requête de schéma utilisant ASSOCIATORS OF et WHERE :

ASSOCIATORS OF {myClass} WHERE SchemaOnly

L’exemple suivant est une requête de données utilisant l’instruction REFERENCES OF et WHERE :

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

Ce dernier exemple est une requête de schéma utilisant REFERENCES OF et WHERE :

REFERENCES OF {myClass} WHERE SchemaOnly

En plus du format WMI DATETIME , la clause WHERE WQL prend en charge plusieurs autres formats de date et d’heure :