SELECT-instruktion för schemafrågor
Schemadatafrågor använder SELECT-instruktionen med en syntax som liknar den för datafrågor. Skillnaden är användningen av en särskild klass med namnet "meta_class", som identifierar frågan som en schemafråga.
I följande exempel begärs alla klassdefinitioner som finns inom det aktuella namnområdet.
SELECT * FROM meta_class
Schemafrågor stöder endast "*". För att begränsa omfattningen för de definitioner som returneras kan en provider lägga till en WHERE-sats som anger en viss klass.
I följande exempel visas hur du lägger till en WHERE-sats för att ange en viss klass.
SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"
Den särskilda egenskapen __this identifierar målklassen för en schemafråga. Observera att ISA-operatorn måste användas med egenskapen __this för att begära definitioner för underklasserna i målklassen. Föregående fråga returnerar definitionen för klassen Win32_LogicalDisk och definitioner för alla dess underklasser.
I följande exempel visas hur du begär en klassdefinition för en enskild klass med hjälp av __Class-systemegenskapen.
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
Den här frågan motsvarar anropet IWbemServices::GetObject eller IWbemServices::GetObjectAsync-metoden med parametern objektsökväg inställd på "Win32_LogicalDisk".
Följande VBScript-kodexempel hämtar alla underordnade klasser i en WMI-klass på toppnivå. Den __Dynasty WMI-systemegenskapen innehåller namnet på den toppnivåklass som en klass härleds från, som du kan använda för att hämta alla klasser i ett namnområde som härletts från en toppnivåklass, inklusive den klassen.
' Retrieve immediate child classes for Cim_DataFile
Set objWmi = GetObject ("winmgmts:root\cimv2")
Set colClasses = objWmi.ExecQuery _
("Select * From meta_class " _
& "Where __Dynasty = 'Win32_CurrentTime'")
For Each objClass In colClasses
WScript.Echo objClass.SystemProperties_("__Class")
Next
Följande VBScript hämtar en omedelbar underordnad klass för en WMI-klass.
' Retrieve immediate child classes for Cim_DataFile
Set objWmi = GetObject ("winmgmts:root\cimv2")
Set colClasses = objWmi.ExecQuery _
("Select * From meta_class " _
& "Where __Superclass = 'Cim_DataFile'")
For Each objClass In colClasses
WScript.Echo objClass.SystemProperties_("__Class")
Next
Följande VBScript hämtar klasser på toppnivå. För alla klasser på den översta nivån i ett WMI-namnområde är __Superclass-systemegenskapen Null. Därför är det möjligt att hämta toppnivåklasserna genom att söka efter en Null-superklass.
Retrieve top level classes in root\cimv2
Set objWmi = GetObject ("winmgmts:root\cimv2")
Set colClasses = objWmi.ExecQuery _
("Select * From meta_class Where __Superclass Is Null")
For Each objClass In colClasses
WScript.Echo objClass.SystemProperties_("__Class")