Delen via


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")