Freigeben über


SELECT-Anweisung für Schemaabfragen

Schemadatenabfragen verwenden die SELECT-Anweisung mit einer Syntax, die dem für Datenabfragenähnelt. Der Unterschied besteht in der Verwendung einer speziellen Klasse namens "meta_class", die die Abfrage als Schemaabfrage identifiziert.

Im folgenden Beispiel werden alle Klassendefinitionen im aktuellen Namespace anfordert.

SELECT * FROM meta_class

Schemaabfragen unterstützen nur "*". Um den Umfang der zurückgegebenen Definitionen einzuschränken, kann ein Anbieter eine WHERE-Klausel hinzufügen, die eine bestimmte Klasse angibt.

Das folgende Beispiel zeigt, wie Sie eine WHERE-Klausel hinzufügen, um eine bestimmte Klasse anzugeben.

SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"

Die spezielle Eigenschaft __this identifiziert die Zielklasse für eine Schemaabfrage. Beachten Sie, dass der ISA-Operator mit der __this-Eigenschaft verwendet werden muss, um Definitionen für die Unterklassen der Zielklasse anzufordern. Die vorherige Abfrage gibt die Definition für die Win32_LogicalDisk Klasse und Definitionen für alle unterklassen zurück.

Das folgende Beispiel zeigt, wie Sie eine Klassendefinition für eine einzelne Klasse mithilfe der __Class Systemeigenschaft anfordern.

SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"

Diese Abfrage entspricht dem Aufrufen der IWbemServices::GetObject oder der IWbemServices::GetObjectAsync Methode, wobei der Objektpfadparameter auf "Win32_LogicalDisk" festgelegt ist.

Im folgenden VBScript-Codebeispiel werden alle untergeordneten Klassen einer WMI-Klasse der obersten Ebene abgerufen. Die __Dynasty WMI-Systemeigenschaft enthält den Namen der Klasse der obersten Ebene, von der eine Klasse abgeleitet wird, mit der Sie alle Klassen in einem Namespace abrufen können, der von einer Klasse der obersten Ebene abgeleitet ist, einschließlich dieser 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

Das folgende VBScript ruft eine sofortige untergeordnete Klasse für eine WMI-Klasse ab.

' 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

Mit dem folgenden VBScript werden Klassen der obersten Ebene abgerufen. Für alle Klassen der obersten Ebene in einem WMI-Namespace ist die __Superclass Systemeigenschaft Null. Daher ist es möglich, die Klassen der obersten Ebene abzurufen, indem sie nach einer Null-Superklasse suchen.

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