Share via


WHERE 절(WMI)

WHERE 절을 사용하여 데이터, 이벤트 또는 스키마 쿼리의 범위를 좁힐 수 있습니다. 자세한 내용은 WQL을 사용하여 쿼리를 참조하세요. WHERE 절은 속성 또는 키워드, 연산자 및 상수로 구성됩니다. 모든 WHERE 절은 WMI(Windows Management Instrumentation) WQL(쿼리 언어)에 포함된 연산자 중 미리 정의된 연산자를 지정해야 합니다. 다음 양식 중 하나를 사용하여 SELECT 문에 WHERE 절을 추가할 수 있습니다.

SELECT * FROM class WHERE property operator constant
SELECT * FROM class WHERE constant operator property

여기서 *는 쿼리된 항목이고, 클래스는 쿼리할 클래스이며, 상수, 연산자 및 속성은 사용할 상수, 연산자 및 속성 또는 키워드입니다. SELECT 문에 대한 자세한 내용은 데이터 쿼리에 대한 SELECT 문, 이벤트 쿼리에 대한 SELECT 문 또는 스키마 쿼리에 대한 SELECT 문을 참조하세요.

상수의 값은 속성에 올바른 형식이어야 합니다. 또한 연산자는 유효한 WQL 연산자 목록 중 하나에 있어야 합니다. 속성 이름 또는 상수는 WHERE 절에서 연산자의 양쪽에 나타나야 합니다.

WHERE 절에서 "NTFS"와 같은 문자열 리터럴을 사용할 수 있습니다. 문자열에 다음 특수 문자를 포함하려면 먼저 백슬래시(\)를 문자의 접두사로 지정하여 문자를 이스케이프해야 합니다.

  • 백슬래시(\)
  • 큰따옴표(")
  • 작은따옴표(')

임의 산술식은 사용할 수 없습니다. 예를 들어 다음 쿼리는 NTFS 드라이브를 나타내는 Win32_LogicalDisk 클래스의 인스턴스만 반환합니다.

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

속성 이름은 연산자의 양쪽에 나타날 수 없습니다. 다음 쿼리는 잘못된 쿼리의 예입니다.

SELECT * FROM PhysicalDisk WHERE Partitions < (4 + 7 - 2) 
    OR   (Partitions = SectorsPerTrack / 7)

WHERE 절에서 클래스 설명자를 사용하는 대부분의 경우 WMI는 쿼리에 잘못되었다는 플래그를 지정하고 오류를 반환합니다. 그러나 WMI에서 개체 형식의 속성에 점(.) 연산자를 사용합니다. 예를 들어 Prop이 MyClass의 유효한 속성이고 형식 개체인 경우 다음 쿼리가 유효합니다.

SELECT * FROM MyClass WHERE Prop.embedprop = 5

비교 테스트는 항상 대/소문자를 구분하지 않습니다. 즉, 다음 세 개 문은 모두 TRUE로 평가됩니다.

SELECT * FROM MyClass WHERE Prop1 = "cat"
SELECT * FROM MyClass WHERE Prop1 = "CAT"
SELECT * FROM MyClass WHERE Prop1 = "cAt"

부울 데이터 형식을 포함하는 쿼리를 생성할 수 있지만 유효한 부울 피연산자 형식은 =, != 및 <> 형식뿐입니다. TRUE 값은 숫자 1과 같고 FALSE 값은 숫자 0과 같습니다. 다음 예제는 부울 값을 TRUE 또는 FALSE 값과 비교하는 쿼리입니다.

SELECT * FROM MyClass WHERE BoolProp = 1
SELECT * FROM MyClass WHERE BoolProp = TRUE
SELECT * FROM MyClass WHERE BoolProp <> FALSE
SELECT * FROM MyClass WHERE BoolProp = 0
SELECT * FROM MyClass WHERE BoolProp = FALSE
SELECT * FROM MyClass WHERE BoolProp != 1
SELECT * FROM MyClass WHERE BoolProp != FALSE
SELECT * FROM MyClass WHERE BoolProp <> FALSE

다음 예제는 잘못된 피연산자를 사용하려고 하는 잘못된 쿼리입니다.

SELECT * FROM MyClass WHERE BoolProp <= TRUE
SELECT * FROM MyClass WHERE BoolProp >= 0
SELECT * FROM MyClass WHERE BoolProp > FALSE
SELECT * FROM win32_computersystem WHERE infraredsupported >= null

논리 연산자와 괄호 하위 식으로 WHERE 절에서 여러 속성, 연산자 및 상수 그룹을 결합할 수 있습니다. 각 그룹은 다음 쿼리와 같이 AND, OR 또는 NOT 연산자와 조인되어야 합니다. 첫 번째 쿼리는 Name 속성이 C 또는 D로 설정된 Win32_LogicalDisk 클래스의 모든 인스턴스를 검색합니다.

SELECT * FROM Win32_LogicalDisk WHERE Name = "C:" OR Name = "D:"

두 번째 쿼리는 특정한 용량의 공간이 사용할 수 있도록 남아 있고 NTFS 파일 시스템을 사용하는 경우에만 "C:" 또는 "D:"라는 디스크를 검색합니다.

SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:") 
    AND  FreeSpace > 2000000  AND   FileSystem = "NTFS"

이 예제에서는 WHERE 절을 사용하는 스키마 쿼리를 보여줍니다.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

클래스 meta_class는 이를 스키마 쿼리로 식별하고 __this라는 속성은 쿼리의 대상 클래스를 식별하며 ISA 연산자는 대상 클래스의 하위 클래스에 대한 정의를 요청합니다. 따라서 앞의 쿼리는 myClassName 클래스 및 그것의 모든 하위 클래스에 대한 정의를 반환합니다.

다음 예제는 WHERE와 함께 ASSOCIATORS OF 문을 사용하는 데이터 쿼리입니다.

ASSOCIATORS OF {myClass.keyVal="Value1"} WHERE ClassDefsOnly

다음 예제는 ASSOCIATORS OF 및 WHERE를 사용하는 스키마 쿼리를 보여줍니다.

ASSOCIATORS OF {myClass} WHERE SchemaOnly

다음 예제는 WHERE와 함께 REFERENCES OF 문을 사용하는 데이터 쿼리입니다.

REFERENCES OF {myClass.keyVal="Value1"} 
    WHERE RequiredQualifier = myQual

이 마지막 예제는 REFERENCES OF 및 WHERE를 사용하는 스키마 쿼리입니다.

REFERENCES OF {myClass} WHERE SchemaOnly

WMI DATETIME 형식 외에도 WQL WHERE 절은 몇 가지 다른 날짜 및 시간 형식을 지원합니다.