Condividi tramite


Clausola WHERE (WMI)

Usare la clausola WHERE per limitare l'ambito di una query di dati, evento o schema. Per altre informazioni, vedere Query con WQL. La clausola WHERE è costituita da una proprietà o una parola chiave, un operatore e una costante. Tutte le clausole WHERE devono specificare uno degli operatori predefiniti inclusi in Windows Management Instrumentation (WMI) Query Language (WQL). È possibile aggiungere la clausola WHERE all'istruzione SELECT usando uno dei moduli seguenti:

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

dove * è l'elemento su cui viene eseguita una query, la classe è la classe in cui eseguire query, operatore e proprietà sono la costante, l'operatore e la proprietà o la parola chiave da usare. Per altre informazioni sull'istruzione SELECT, vedere Istruzione SELECT per query sui dati, istruzione SELECT per query di eventi o istruzione SELECT per le query dello schema.

Il valore della costante deve essere del tipo corretto per la proprietà. Inoltre, l'operatore deve essere tra l'elenco degli operatori WQL validi. Un nome di proprietà o una costante devono essere visualizzati su un lato dell'operatore nella clausola WHERE.

È possibile usare valori letterali stringa, ad esempio "NTFS", in una clausola WHERE. Se si desidera includere i caratteri speciali seguenti nella stringa, è prima necessario eseguire l'escape del carattere tramite il prefisso del carattere con una barra rovesciata (\):

  • barra rovesciata (\\)
  • virgolette doppie (\")
  • virgolette singole (\')

Non è possibile usare espressioni aritmetiche arbitrarie. Ad esempio, la query seguente restituisce solo le istanze della classe Win32_LogicalDisk che rappresentano unità NTFS:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

I nomi delle proprietà non possono essere visualizzati su entrambi i lati dell'operatore. La query seguente è un esempio di query non valida:

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

Per la maggior parte degli usi dei descrittori di classe in una clausola WHERE, WMI contrassegna la query come non valida e restituisce un errore. Tuttavia, usare l'operatore dot (.) per le proprietà dell'oggetto type in WMI. Ad esempio, la query seguente è valida se Prop è una proprietà valida di MyClass ed è oggetto type:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

I test di confronto sono sempre senza distinzione tra maiuscole e minuscole. Ovvero, le tre istruzioni seguenti valutano tutte true:

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

È possibile creare una query che include tipi di dati booleani, ma gli unici tipi operandi booleani validi sono i tipi =, != e <> . Il valore TRUE equivale al numero 1 e il valore FALSE equivale al numero 0. Gli esempi seguenti sono di query che confrontano un valore booleano rispetto ai valori 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

Gli esempi seguenti sono di query non valide che tentano di usare operandi non validi.

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

È possibile combinare più gruppi di proprietà, operatori e costanti in una clausola WHERE usando operatori logici e sottoespressioni parentesi. Ogni gruppo deve essere aggiunto agli operatori AND, OR o NOT, come illustrato nelle query seguenti. La prima query recupera tutte le istanze della classe Win32_LogicalDisk con la proprietà Name impostata su C o D:

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

La seconda query recupera i dischi denominati "C:" o "D:" solo se hanno una certa quantità di spazio disponibile rimanente e hanno file system NTFS:

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

In questo esempio viene illustrata una query dello schema usando la clausola WHERE.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

La classe meta_class identifica questa operazione come query dello schema, la proprietà denominata __this identifica la classe di destinazione della query e le definizioni degli operatori ISA per le sottoclassi della classe di destinazione. Pertanto, la query precedente restituisce la definizione per la classe e le definizioni myClassName per tutte le sottoclassi.

L'esempio seguente è una query di dati usando l'istruzione ASSOCIATORS OF con WHERE:

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

L'esempio successivo mostra una query dello schema usando ASSOCIATORS OF e WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

L'esempio seguente è una query di dati usando l'istruzione REFERENCES OF e WHERE:

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

Questo ultimo esempio è una query dello schema usando REFERENCES OF e WHERE:

REFERENCES OF {myClass} WHERE SchemaOnly

Oltre al formato WMI DATETIME , la clausola WQL WHERE supporta diversi altri formati di data e ora: