SELECT-instructie voor schemaquery's
Schemagegevensquery's gebruiken de SELECT-instructie met een syntaxis die vergelijkbaar is met die voor gegevensquery's. Het verschil is het gebruik van een speciale klasse met de naam 'meta_class', waarmee de query wordt geïdentificeerd als een schemaquery.
In het volgende voorbeeld worden alle klassedefinities aangevraagd die zich binnen de huidige naamruimte bevinden.
SELECT * FROM meta_class
Schemaquery's ondersteunen alleen *. Om het bereik van de geretourneerde definities te beperken, kan een provider een WHERE-component toevoegen waarmee een bepaalde klasse wordt opgegeven.
In het volgende voorbeeld ziet u hoe u een WHERE-component toevoegt om een bepaalde klasse op te geven.
SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"
De speciale eigenschap __this identificeert de doelklasse voor een schemaquery. Houd er rekening mee dat de ISA-operator moet worden gebruikt met de eigenschap __this om definities aan te vragen voor de subklassen van de doelklasse. De voorgaande query retourneert de definitie voor de Win32_LogicalDisk klasse en definities voor alle subklassen.
In het volgende voorbeeld ziet u hoe u een klassedefinitie voor één klasse aanvraagt met behulp van de __Class systeemeigenschap.
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
Deze query is gelijk aan het aanroepen van de methode IWbemServices::GetObject of de IWbemServices::GetObjectAsync methode waarbij de parameter objectpad is ingesteld op 'Win32_LogicalDisk'.
Met het volgende VBScript-codevoorbeeld worden alle onderliggende klassen van een WMI-klasse op het hoogste niveau opgehaald. De __Dynasty WMI-systeemeigenschap bevat de naam van de klasse op het hoogste niveau waaruit een klasse is afgeleid, die u kunt gebruiken om alle klassen op te halen in een naamruimte die is afgeleid van een klasse op het hoogste niveau, inclusief die klasse.
' 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
Met het volgende VBScript worden directe onderliggende klassen opgehaald voor een WMI-klasse.
' 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
Met het volgende VBScript worden klassen op het hoogste niveau opgehaald. Voor alle klassen op het hoogste niveau in een WMI-naamruimte is de __Superclass systeemeigenschap Null. Daarom is het mogelijk om de klassen op het hoogste niveau op te halen door te zoeken naar een Null-superklasse.
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")