Compartilhar via


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, consulte Consulta com o 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 Linguagem de Consulta WQL (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

where * é o item consultado sobre, a classe é a classe na qual consultar e constante, operador e propriedade são a constante, operador e 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 eventosou 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 do 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 em sua cadeia de caracteres, primeiro você deve escapar do caractere prefixando o caractere com uma barra invertida (\):

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

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

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Os nomes de propriedade não podem aparecer em ambos os lados do operador. A consulta a seguir é um exemplo de uma 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 dot (.) para propriedades do tipo objeto no WMI. Por exemplo, a consulta a seguir será válida se Prop for uma propriedade válida do MyClass e for tipo objeto:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Testes de comparação sempre diferenciam maiúsculas de minúsculas. Ou seja, as três instruções a seguir são avaliadas como VERDADEIRO:

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

Você pode construir uma consulta que inclua tipos de dados boolianos, mas os únicos tipos de operando boolianos válidos são os tipos =, != e <>. O valor VERDADEIRO é 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 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 recupera 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 definições de solicitaçõ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 exemplo a seguir é uma consulta de dados usando a instrução ASSOCIATORS OF com WHERE:

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

O exemplo a seguir mostra uma consulta de esquema usando ASSOCIADORES DE e WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

O exemplo a seguir é 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 WMI, a cláusula WHERE do WQL dá suporte a vários outros formatos de data e hora: