Partilhar via


Cláusula WHERE (WMI)

Use a cláusula WHERE para restringir o escopo de uma consulta de dados, evento ou esquema. Para obter mais informações, consulte Consultando 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 (Query Language) da Instrumentação de Gerenciamento do Windows (WMI). 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

onde * é o item consultado, 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 eventoou 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 na 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 desejar incluir os seguintes caracteres especiais em sua cadeia de caracteres, você deve primeiro 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 é válida se Prop é uma propriedade válida de MyClass e é tipo objeto:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Os testes de comparação não diferenciam maiúsculas de minúsculas. Ou seja, todas as três afirmações a seguir avaliam para VERDADEIRA:

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 booleanos, mas os únicos tipos de operando booleanos 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 booleano 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 com os operadores E, OU NÃO como é 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 certa 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 exemplo a seguir é uma consulta de dados usando a instrução ASSOCIATORS OF com WHERE:

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

O próximo exemplo mostra uma consulta de esquema usando ASSOCIATORS OF 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 WMI DATETIME, a cláusula WQL WHERE suporta vários outros formatos de data e hora: