Cláusula WHERE (WMI)

Use a cláusula WHERE para restringir o escopo de uma consulta de dados, eventos ou esquema. Para obter mais informações, confira Como consultar com WQL. A cláusula WHERE é composta por uma propriedade ou palavra-chave, um operador e uma constante. Todas as cláusulas WHERE devem especificar um dos operadores predefinidos incluídos na WQL (Linguagem de Consulta WMI, Instrumentação de Gerenciamento do Windows). Você pode acrescentar a cláusula WHERE à instrução SELECT usando um dos seguintes formulários:

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

em que * é o item consultado, classe é a classe na qual consultar e constante, operador e propriedade são a constante, o operador e a propriedade ou palavra-chave a ser usada. Para obter mais informações sobre a instrução SELECT, consulte Instrução SELECT para consultas de dados, Instrução SELECT para consultas de evento ou Instrução SELECT para consultas de esquema.

O valor da constante deve ser do tipo correto para a propriedade. Além disso, o operador deve estar entre a lista de operadores WQL válidos. Um nome de propriedade ou uma constante deve aparecer em ambos os lados do operador na cláusula WHERE.

Você pode usar literais de cadeia de caracteres, como "NTFS", em uma cláusula WHERE. Se quiser incluir os seguintes caracteres especiais na cadeia de caracteres, primeiro faça o escape do caractere prefixando-o com uma barra invertida (\):

  • barra invertida (\)
  • aspas duplas (\")
  • aspas simples (\')

Expressões aritméticas arbitrárias não podem ser usadas. Por exemplo, a seguinte consulta retorna apenas as instâncias da classe Win32_LogicalDisk que representam unidades NTFS:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Nomes de propriedade não podem aparecer em ambos os lados do operador. A seguinte consulta é um exemplo de consulta inválida:

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

Para a maioria dos usos de descritores de classe em uma cláusula WHERE, o WMI sinaliza a consulta como inválida e retorna um erro. No entanto, use o operador de ponto (.) para propriedades do tipo objeto no WMI. Por exemplo, a seguinte consulta será válida se Prop for uma propriedade válida de MyClass e for do tipo object:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Os testes de comparação sempre diferenciam maiúsculas de minúsculas. Ou seja, as três seguintes instruções são avaliadas como TRUE:

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

Você pode construir uma consulta que inclui tipos de dados boolianos, mas os únicos tipos de operando boolianos válidos são os tipos =, != e <> . O valor TRUE é equivalente ao número 1 e o valor FALSE é equivalente ao número 0. Os exemplos a seguir são de consultas que comparam um valor booliano com os valores 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

Os exemplos a seguir são de consultas inválidas que tentam usar operandos invá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

Vários grupos de propriedades, operadores e constantes podem ser combinados em uma cláusula WHERE usando operadores lógicos e subexpressões entre parênteses. Cada grupo deve ser unido aos operadores AND, OR ou NOT, conforme mostrado nas consultas a seguir. A primeira consulta recupera todas as instâncias da classe Win32_LogicalDisk com a propriedade Name definida como C ou D:

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

A segunda consulta recuperará discos chamados "C:" ou "D:" somente se eles tiverem uma determinada quantidade de espaço livre restante e tiverem sistemas de arquivos NTFS:

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

Este exemplo mostra uma consulta de esquema usando a cláusula WHERE.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

A classe meta_class identifica isso como uma consulta de esquema, a propriedade chamada __this identifica a classe de destino da consulta e o operador ISA solicita definições para as subclasses da classe de destino. Portanto, a consulta anterior retorna a definição para a classe myClassName e definições para todas as suas subclasses.

O seguinte exemplo é uma consulta de dados usando a instrução ASSOCIATORS OF com WHERE:

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

O seguinte exemplo mostra uma consulta de esquema usando ASSOCIATORS OF e WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

O seguinte exemplo é uma consulta de dados usando a instrução REFERENCES OF e WHERE:

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

Este último exemplo é uma consulta de esquema usando REFERENCES OF e WHERE:

REFERENCES OF {myClass} WHERE SchemaOnly

Além do formato DATETIME do WMI, a cláusula WQL WHERE dá suporte a vários outros formatos de data e hora: