Compartir a través de


Cláusula WHERE (WMI)

Use la cláusula WHERE para restringir el ámbito de una consulta de datos, eventos o esquemas. Para obtener más información, vea 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 de Instrumental de administración de Windows (WMI) (WQL). 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 que se consulta sobre, la clase es la clase en la que se va a consultar, y constante, operador y propiedad son la constante, el operador y la propiedad o la palabra clave que se van a usar. Para obtener más información sobre la instrucción SELECT, vea instrucción SELECT para consultas de datos, instrucción SELECT para consultas de eventoso 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 de válidos. Un nombre de propiedad o una constante deben aparecer en cualquiera de los lados del operador en la cláusula WHERE.

Puede usar literales de cadena, como "NTFS", en una cláusula WHERE. 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 una consulta no válida:

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

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

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 para 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 entre paréntesis. Cada grupo debe estar unido a los operadores AND, OR o NOT tal como se muestra en las siguientes consultas. 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 discos denominados "C:" o "D:" solo si tienen cierta cantidad de espacio libre restante y tienen 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 definiciones de solicitudes 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 ASOCIADORES 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 de DATETIME de WMI, la cláusula WHERE de WQL admite otros formatos de fecha y hora: