Udostępnij za pośrednictwem


Instrukcja SELECT dla zapytań schematu

Zapytania dotyczące danych schematu używają instrukcji SELECT ze składnią podobną do tej w przypadku zapytań dotyczących danych . Różnica polega na użyciu specjalnej klasy o nazwie "meta_class", która identyfikuje zapytanie jako zapytanie schematu.

Poniższy przykład żąda wszystkich definicji klas znajdujących się w bieżącej przestrzeni nazw.

SELECT * FROM meta_class

Zapytania schematu obsługują tylko "*". Aby zawęzić zakres zwracanych definicji, dostawca może dodać klauzulę WHERE określającą określoną klasę.

W poniższym przykładzie pokazano, jak dodać klauzulę WHERE, aby określić określoną klasę.

SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"

Właściwość specjalna o nazwie __this identyfikuje klasę docelową dla zapytania schematu. Należy pamiętać, że operator ISA musi być używany z właściwością __this, aby zażądać definicji dla podklas klasy docelowej. Powyższe zapytanie zwraca definicję dla klasy Win32_LogicalDisk i definicji dla wszystkich jej podklas.

W poniższym przykładzie pokazano, jak zażądać definicji klasy dla pojedynczej klasy przy użyciu właściwości systemu __Class.

SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"

To zapytanie jest równoważne wywołaniu metody IWbemServices::GetObject lub IWbemServices::GetObjectAsync z parametrem ścieżki obiektu ustawionym na "Win32_LogicalDisk".

Poniższy przykład kodu VBScript pobiera wszystkie klasy podrzędne klasy WMI najwyższego poziomu. Właściwość systemu __Dynasty WMI zawiera nazwę klasy najwyższego poziomu, z której pochodzi klasa, której można użyć do pobrania wszystkich klas w przestrzeni nazw pochodzącej z klasy najwyższego poziomu, w tym tej klasy.

' 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

Poniższy kod VBScript pobiera natychmiastowe klasy podrzędne dla klasy WMI.

' 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

Poniższy kod VBScript pobiera klasy najwyższego poziomu. We wszystkich klasach najwyższego poziomu w przestrzeni nazw usługi WMI właściwość systemu __Superclass ma wartość Null. W związku z tym można pobrać klasy najwyższego poziomu, wyszukując superklasę o wartości Null.

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