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