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 Consultar 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 WQL (Linguagem de Consulta WMI) de Instrumentação de Gerenciamento 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 * is the item queried about, class is the class in which to query, and constant, operator, and property are the constant, operator, and property or keyword to use. Para obter mais informações sobre a instrução SELECT, consulte a instrução SELECT para consultas de dados, a instrução SELECT para consultas de evento ou a 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 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 objeto type no WMI. Por exemplo, a consulta a seguir será válida se Prop for uma propriedade válida do MyClass e for um objeto de tipo:
SELECT * FROM MyClass WHERE Prop.embedprop = 5
Testes de comparação sempre diferenciam maiúsculas de minúsculas. Ou seja, todas as três instruções a seguir 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 inclua 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 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 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 exemplo a seguir 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 REFERÊNCIAS DE e WHERE:
REFERENCES OF {myClass} WHERE SchemaOnly
Além do formato WMI DATETIME , a cláusula WQL WHERE dá suporte a vários outros formatos de data e hora: