스키마 쿼리에 대한 SELECT 문
스키마 데이터 쿼리는 데이터 쿼리의 경우와 유사한 구문이 있는 SELECT 문을 사용합니다. 차이점은 쿼리를 스키마 쿼리로 식별하는 ‘meta_class’라는 특수 클래스를 사용하는 것입니다.
다음 예제에서는 현재 네임스페이스 내에 있는 모든 클래스 정의를 요청합니다.
SELECT * FROM meta_class
스키마 쿼리는 ‘*’만 지원합니다. 반환된 정의의 범위를 좁히기 위해 공급자는 특정 클래스를 지정하는 WHERE 절을 추가할 수 있습니다.
다음 예제에서는 WHERE 절을 추가하여 특정 클래스를 지정하는 방법을 보여줍니다.
SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"
__this라는 특수 속성은 스키마 쿼리의 대상 클래스를 식별합니다. 대상 클래스의 하위 클래스에 대한 정의를 요청하려면 ISA 연산자를 __this 속성과 함께 사용해야 합니다. 앞의 쿼리는 Win32_LogicalDisk 클래스 및 그것의 모든 하위 클래스에 대한 정의를 반환합니다.
다음 예제에서는 __Class 시스템 속성을 사용하여 단일 클래스에 대한 클래스 정의를 요청하는 방법을 보여줍니다.
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
이 쿼리는 개체 경로 매개 변수가 ‘Win32_LogicalDisk’로 설정된 IWbemServices::GetObject 또는 IWbemServices::GetObjectAsync 메서드를 호출하는 것과 같습니다.
다음 VBScript 코드 샘플은 최상위 WMI 클래스의 모든 자식 클래스를 검색합니다. __Dynasty WMI 시스템 속성에는 클래스가 파생된 최상위 클래스의 이름이 포함되며, 이 클래스를 사용하여 해당 클래스를 포함해 최상위 클래스에서 파생된 네임스페이스의 모든 클래스를 검색할 수 있습니다.
' 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
다음 VBScript는 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
다음 VBScript는 최상위 클래스를 검색합니다. WMI 네임스페이스의 모든 최상위 클래스에 대해 __Superclass 시스템 속성은 Null입니다. 따라서 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")