스키마 쿼리에 대한 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")