Dela via


WHERE-sats (WMI)

Använd WHERE-satsen för att begränsa omfånget för en data-, händelse- eller schemafråga. Mer information finns i Querying with WQL. WHERE-satsen består av en egenskap eller ett nyckelord, en operator och en konstant. Alla WHERE-satser måste ange en av de fördefinierade operatorerna som ingår i WMI-frågespråket (Windows Management Instrumentation) (WQL). Du kan lägga till WHERE-satsen i SELECT-instruktionen med något av följande formulär:

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

där * är det objekt som efterfrågas är klassen den klass där du ska fråga, och konstant, operator och egenskap är konstanten, operatorn och egenskapen eller nyckelordet som ska användas. Mer information om SELECT-instruktionen finns i SELECT-instruktion för datafrågor, SELECT-instruktion för händelsefrågoreller SELECT-instruktion för schemafrågor.

Värdet för konstanten måste vara av rätt typ för egenskapen. Dessutom måste operatorn finnas med i listan över giltiga WQL-operatorer. Antingen måste ett egenskapsnamn eller en konstant visas på endera sidan av operatorn i WHERE-satsen.

Du kan använda strängliteraler, till exempel "NTFS", i en WHERE-sats. Om du vill inkludera följande specialtecken i strängen måste du först undvika tecknet genom att prefixa tecknet med ett omvänt snedstreck (\):

  • omvänt snedstreck (\\)
  • dubbla citattecken (\")
  • enkla citattecken (\')

Godtyckliga aritmetiska uttryck kan inte användas. Följande fråga returnerar till exempel endast instanserna av klassen Win32_LogicalDisk som representerar NTFS-enheter:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Egenskapsnamn kan inte visas på båda sidor av operatorn. Följande fråga är ett exempel på en ogiltig fråga:

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

För de flesta användningar av klassbeskrivningar i en WHERE-sats flaggar WMI frågan som ogiltig och returnerar ett fel. Använd dock punktoperatorn (.) för egenskaper av typen objekt i WMI. Följande fråga är till exempel giltig om Prop är en giltig egenskap för MyClass och är typ objekt:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Jämförelsetester är alltid skiftlägesokänsliga. Det innebär att följande tre instruktioner alla utvärderas till TRUE:

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

Du kan skapa en fråga som innehåller booleska datatyper, men de enda giltiga booleska operandtyperna är typerna =, != och <>. Värdet TRUE motsvarar talet 1 och värdet FALSE motsvarar talet 0. Följande exempel är frågor som jämför ett booleskt värde med värdena TRUE eller 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

Följande exempel är ogiltiga frågor som försöker använda ogiltiga operander.

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

Flera grupper av egenskaper, operatorer och konstanter kan kombineras i en WHERE-sats med hjälp av logiska operatorer och parentetiska underuttryck. Varje grupp måste vara ansluten till operatorerna AND, OR eller NOT som visas i följande frågor. Den första frågan hämtar alla instanser av klassen Win32_LogicalDisk med egenskapen Name inställd på C eller D:

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

Den andra frågan hämtar diskar med namnet "C:" eller "D:" endast om de har en viss mängd ledigt utrymme kvar och har NTFS-filsystem:

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

Det här exemplet visar en schemafråga med hjälp av WHERE-satsen.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

Klassen meta_class identifierar detta som en schemafråga, egenskapen med namnet __this identifierar målklassen för frågan och ISA-operatorn begär definitioner för underklasserna i målklassen. Därför returnerar föregående fråga definitionen för klassen myClassName och definitioner för alla dess underklasser.

Följande exempel är en datafråga med hjälp av ASSOCIATORS OF-instruktionen med WHERE:

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

I nästa exempel visas en schemafråga med ASSOCIATORS OF och WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

Följande exempel är en datafråga med hjälp av REFERENCES OF-instruktionen och WHERE:

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

Det sista exemplet är en schemafråga med referenser till och WHERE:

REFERENCES OF {myClass} WHERE SchemaOnly

Förutom WMI-DATETIME- format stöder WQL WHERE-satsen flera andra datum- och tidsformat: