WHERE-component (WMI)
Gebruik de WHERE-component om het bereik van een gegevens-, gebeurtenis- of schemaquery te beperken. Zie Query's uitvoeren met WQL-voor meer informatie. De WHERE-component bestaat uit een eigenschap of trefwoord, een operator en een constante. Alle WHERE-componenten moeten een van de vooraf gedefinieerde operators opgeven die zijn opgenomen in de WMI-querytaal (Windows Management Instrumentation) (WQL). U kunt de WHERE-component toevoegen aan de SELECT-instructie met behulp van een van de volgende formulieren:
SELECT * FROM class WHERE property operator constant
SELECT * FROM class WHERE constant operator property
waarbij * het item is waarover wordt gevraagd, klasse is de klasse waarin query's moeten worden uitgevoerd en constante, operator en eigenschap de constante, operator en eigenschap of het te gebruiken trefwoord zijn. Zie SELECT-instructie voor gegevensquery's, SELECT-instructie voor gebeurtenisquery'sof SELECT-instructie voor schemaquery'svoor meer informatie over de SELECT-instructie.
De waarde van de constante moet van het juiste type voor de eigenschap zijn. Bovendien moet de operator deel uitmaken van de lijst met geldige WQL-operators. Een eigenschapsnaam of een constante moet aan beide zijden van de operator in de WHERE-component worden weergegeven.
U kunt letterlijke tekenreeksen, zoals NTFS, gebruiken in een WHERE-component. Als u de volgende speciale tekens in de tekenreeks wilt opnemen, moet u eerst het teken escapen door het teken te voorzien van een backslash (\):
- backslash (\\)
- dubbele aanhalingstekens (\")
- enkele aanhalingstekens (\')
Willekeurige rekenkundige expressies kunnen niet worden gebruikt. De volgende query retourneert bijvoorbeeld alleen de exemplaren van de Win32_LogicalDisk-klasse die NTFS-stations vertegenwoordigen:
SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"
Eigenschapsnamen kunnen niet aan beide zijden van de operator worden weergegeven. De volgende query is een voorbeeld van een ongeldige query:
SELECT * FROM PhysicalDisk WHERE Partitions < (4 + 7 - 2)
OR (Partitions = SectorsPerTrack / 7)
Voor de meeste toepassingen van klassedescriptors in een WHERE-component markeert WMI de query als ongeldig en wordt een fout geretourneerd. Gebruik echter de puntoperator (.) voor eigenschappen van het type object in WMI. De volgende query is bijvoorbeeld geldig als Prop een geldige eigenschap van MyClass is en objectis:
SELECT * FROM MyClass WHERE Prop.embedprop = 5
Vergelijkingstests zijn altijd niet hoofdlettergevoelig. Dat wil gezegd dat de volgende drie instructies allemaal resulteren in WAAR:
SELECT * FROM MyClass WHERE Prop1 = "cat"
SELECT * FROM MyClass WHERE Prop1 = "CAT"
SELECT * FROM MyClass WHERE Prop1 = "cAt"
U kunt een query maken die booleaanse gegevenstypen bevat, maar de enige geldige Booleaanse operandtypen zijn de typen =, != en <>. De waarde TRUE is gelijk aan het getal 1 en de waarde FALSE gelijk is aan het getal 0. De volgende voorbeelden zijn query's waarmee een Booleaanse waarde wordt vergeleken met de waarden TRUE of 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
De volgende voorbeelden zijn ongeldige query's die proberen ongeldige operanden te gebruiken.
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
Meerdere groepen eigenschappen, operators en constanten kunnen worden gecombineerd in een WHERE-component met behulp van logische operators en haakjes subexpressies. Elke groep moet worden samengevoegd met de OPERATORS AND, OR of NIET , zoals wordt weergegeven in de volgende query's. De eerste query haalt alle exemplaren van de Win32_LogicalDisk klasse op met de eigenschap Name ingesteld op C of D:
SELECT * FROM Win32_LogicalDisk WHERE Name = "C:" OR Name = "D:"
Met de tweede query worden schijven met de naam 'C:' of 'D:' alleen opgehaald als ze een bepaalde hoeveelheid vrije ruimte overblijven en NTFS-bestandssystemen hebben:
SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:")
AND FreeSpace > 2000000 AND FileSystem = "NTFS"
In dit voorbeeld ziet u een schemaquery met behulp van de WHERE-component.
SELECT * FROM meta_class WHERE __this ISA "myClassName"
De klasse meta_class identificeert dit als een schemaquery, de eigenschap __this identificeert de doelklasse van de query en de ISA-operator aanvraagdefinities voor de subklassen van de doelklasse. Daarom retourneert de voorgaande query de definitie voor de klasse myClassName en definities voor alle subklassen.
Het volgende voorbeeld is een gegevensquery met behulp van de ASSOCIATORS OF-instructie met WHERE:
ASSOCIATORS OF {myClass.keyVal="Value1"} WHERE ClassDefsOnly
In het volgende voorbeeld ziet u een schemaquery met ASSOCIATORS VAN en WHERE:
ASSOCIATORS OF {myClass} WHERE SchemaOnly
Het volgende voorbeeld is een gegevensquery met behulp van de VERWIJZINGEN NAAR de instructie en WHERE:
REFERENCES OF {myClass.keyVal="Value1"}
WHERE RequiredQualifier = myQual
Dit laatste voorbeeld is een schemaquery met verwijzingen van en WHERE:
REFERENCES OF {myClass} WHERE SchemaOnly
Naast de WMI-DATETIME--indeling ondersteunt de WQL WHERE-component verschillende andere datum- en tijdnotaties: