Cláusula WHERE (WMI)

Use la cláusula WHERE para restringir el ámbito de una consulta de datos, eventos o esquemas. Para más información, revise Consulta con WQL. La cláusula WHERE se compone de una propiedad o palabra clave, un operador y una constante. Todas las cláusulas WHERE deben especificar uno de los operadores predefinidos que se incluyen en el lenguaje de consulta del Instrumental de administración de Windows (WQL de WMI). Puede anexar la cláusula WHERE a la instrucción SELECT mediante uno de los siguientes formularios:

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

donde * es el elemento sobre el que se consulta, class es la clase en la que se va a consultar, y constant, operator y property son la constante, el operador y la propiedad o la palabra clave que se van a usar. Para más información sobre la instrucción SELECT, consulte Instrucción SELECT para consultas de datos, Instrucción SELECT para consultas de eventos o Instrucción SELECT para consultas de esquema.

El valor de la constante debe ser del tipo correcto para la propiedad. Además, el operador debe estar entre la lista de operadores WQL válidos. En la cláusula WHERE debe aparecer en cualquier lado del operador un nombre de propiedad o una constante.

En una cláusula WHERE puede usar literales de cadena, como "NTFS". Si desea incluir los siguientes caracteres especiales en la cadena, primero debe escapar el carácter mediante el prefijo del carácter con una barra diagonal inversa (\):

  • Barra diagonal inversa (\\)
  • Comillas dobles (\")
  • Comillas simples (\')

No se pueden usar expresiones aritméticas arbitrarias. Por ejemplo, la consulta siguiente devuelve solo las instancias de la clase Win32_LogicalDisk que representan unidades NTFS:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Los nombres de propiedad no pueden aparecer en ambos lados del operador. La consulta siguiente es un ejemplo de consulta no válida:

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

Para la mayoría de los usos de los descriptores de clase en una cláusula WHERE, WMI marca la consulta como no válida y devuelve un error. No obstante, puede usar el operador de punto (.) para las propiedades de tipo object en WMI. Por ejemplo, la siguiente consulta es válida si Prop es una propiedad válida de MyClass y es de tipo object:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Las pruebas de comparación siempre no distinguen mayúsculas de minúsculas. Es decir, las tres instrucciones siguientes se evalúan como TRUE:

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

Puede construir una consulta que incluya tipos de datos booleanos, pero los únicos tipos de operando booleanos válidos son los tipos =, != y <>. El valor TRUE es equivalente al número 1 y el valor FALSE es equivalente al número 0. Los ejemplos siguientes son de consultas que comparan un valor booleano con los valores TRUE o 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

Los ejemplos siguientes son de consultas no válidas que intentan usar operandos no válidos.

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

Se pueden combinar varios grupos de propiedades, operadores y constantes en una cláusula WHERE mediante operadores lógicos y subexpresiones en paréntesis. Cada grupo debe estar unido a los operadores AND, OR o NOT, como se muestra en las consultas siguientes. La primera consulta recupera todas las instancias de la clase Win32_LogicalDisk con la propiedad Name establecida en C o D:

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

La segunda consulta recupera los discos denominados "C:" o "D:" solo si tienen cierta cantidad de espacio libre restante y sistemas de archivos NTFS:

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

En este ejemplo se muestra una consulta de esquema mediante la cláusula WHERE.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

La clase meta_class identifica esto como una consulta de esquema, la propiedad denominada __this identifica la clase de destino de la consulta y el operador ISA solicita definiciones para las subclases de la clase de destino. Por lo tanto, la consulta anterior devuelve la definición de la clase myClassName y las definiciones de todas sus subclases.

El ejemplo siguiente es una consulta de datos mediante la instrucción ASSOCIATORS OF con WHERE:

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

En el ejemplo siguiente se muestra una consulta de esquema mediante ASSOCIATORS OF y WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

El ejemplo siguiente es una consulta de datos mediante la instrucción REFERENCES OF y WHERE:

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

Este último ejemplo es una consulta de esquema mediante REFERENCES OF y WHERE:

REFERENCES OF {myClass} WHERE SchemaOnly

Además del formato DATETIME de WMI, la cláusula WHERE de WQL admite otros formatos de fecha y hora: