다음을 통해 공유


SWbemServices.ExecQuery 메서드

SWbemServices 개체의 ExecQuery 메서드는 쿼리를 실행하여 개체를 검색합니다. 이러한 개체는 반환된 SWbemObjectSet 컬렉션을 통해 사용할 수 있습니다.

이 메서드는 반동기 모드에서 호출됩니다. 자세한 내용은 메서드 호출을 참조하세요.

이 구문에 대한 설명은 스크립팅 API의 문서 규칙을 참조하세요.

구문

objWbemObjectSet = .ExecQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

매개 변수

strQuery

필수 요소. 쿼리의 텍스트를 포함하는 문자열입니다. 이 매개 변수는 공백일 수 없습니다. WMI 쿼리 문자열을 빌드하는 방법에 대한 자세한 내용은 WQL을 사용하여 쿼리WQL 참조를 참조하세요.

strQueryLanguage [optional]

사용할 쿼리 언어를 포함하는 문자열입니다. 지정된 경우 이 값은 "WQL"이어야 합니다.

iFlags [optional]

쿼리의 동작을 결정하고 이 호출이 즉시 반환되는지 여부를 결정하는 정수입니다. 이 매개 변수의 기본값은 wbemFlagReturnImmediately입니다. 이 매개 변수는 다음 값을 허용할 수 있습니다.

wbemFlagForwardOnly(32(0x20))

정방향 전용 열거자가 반환되도록 합니다. 정방향 전용 열거자는 일반적으로 기존 열거자보다 훨씬 빠르고 메모리를 덜 사용하지만 SWbemObject.Clone_에 대한 호출을 허용하지 않습니다.

wbemFlagBidirectional(0(0x0))

클라이언트가 열거자를 해제할 때까지 WMI가 열거형 개체에 대한 포인터를 유지하도록 합니다.

wbemFlagReturnImmediately(16(0x10))

호출이 즉시 반환되도록 합니다.

wbemFlagReturnWhenComplete (0 (0x0))

쿼리가 완료될 때까지 이 호출이 차단되도록 합니다. 이 플래그는 동기 모드에서 메서드를 호출합니다.

wbemQueryFlagPrototype (2 (0x2))

프로토타입 제작에 사용됩니다. 이 플래그는 쿼리가 발생하지 않도록 하고 일반적인 결과 개체처럼 보이는 개체를 반환합니다.

wbemFlagUseAmendedQualifiers (131072 (0x20000))

WMI가 기본 클래스 정의와 함께 클래스 수정 데이터를 반환하도록 합니다. 자세한 내용은 WMI 클래스 정보 지역화를 참조하세요.

objWbemNamedValueSet [optional]

일반적으로 이는 정의되지 않습니다. 그렇지 않으면 요청을 서비스하는 공급자가 사용할 수 있는 컨텍스트 정보를 나타내는 요소가 있는 SWbemNamedValueSet 개체입니다. 그러한 정보를 지원하거나 요구하는 공급자는 인식된 값 이름, 값의 데이터 형식, 허용된 값 및 의미 체계를 문서화해야 합니다.

반환 값

오류가 발생하지 않는 경우 이 메서드는 SWbemObjectSet 개체를 반환합니다. 이는 쿼리의 결과 집합을 포함하는 개체 컬렉션입니다. 호출자는 사용 중인 프로그래밍 언어에 대한 컬렉션 구현을 사용하여 컬렉션을 검사할 수 있습니다. 자세한 내용은 컬렉션 액세스를 참조하세요.

오류 코드

ExecQuery 메서드가 완료되면 Err 개체에 다음 목록의 오류 코드 중 하나가 포함될 수 있습니다.

wbemErrAccessDenied - 2147749891(0x80041003)

현재 사용자는 결과 집합을 볼 수 있는 권한이 없습니다.

wbemErrFailed - 2147749889(0x80041001)

알 수 없는 오류입니다.

wbemErrInvalidParameter - 2147749896(0x80041008)

잘못된 매개 변수가 지정되었습니다.

wbemErrInvalidQuery - 2147749911(0x80041017)

쿼리 구문이 잘못되었습니다.

wbemErrInvalidQueryType - 2147749912(0x80041018)

요청된 쿼리 언어는 지원되지 않습니다.

wbemErrOutOfMemory - 2147749894(0x80041006)

메모리가 부족하여 작업을 완료할 수 없습니다.

설명

ExecQuery는 WMI 정보를 검색하는 데 가장 일반적으로 사용되는 호출 중 하나입니다. ExecQuery에 대한 표준 호출은 다음과 같습니다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'")
For Each objService in colServices
    Return = objService.StopService()
    If Return <> 0 Then
        Wscript.Echo "Failed " &VBNewLine & "Error code = " & Return 
    Else
       WScript.Echo "Succeeded"
    End If
Next

적절한 네임스페이스 및 보안을 나타내는 모니커를 사용하여 SWbemServices 개체를 만든 다음 서비스를 통해 ExecQuery 호출을 수행합니다. 자세한 내용은 WMI 스크립트 만들기WMI 열거를 참조하세요.

InstancesOf 메서드와 마찬가지로 ExecQuery 메서드는 항상 SWbemObjectSet 컬렉션을 반환합니다. 따라서 WMI 스크립트는 다음과 같이 컬렉션의 각 관리 리소스 인스턴스에 액세스하기 위해 ExecQuery가 반환하는 컬렉션을 열거해야 합니다.

strComputer = "."
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colSWbemObjectSet = objSWbemServices.ExecQuery _
   ("SELECT * FROM Win32_Service")
For Each objSWbemObject In colSWbemObjectSet
    Wscript.Echo "Name: " & objSWbemObject.Name
Next

SWbemObjectSet를 반환하는 다른 SWbemServices 메서드에는 AssociatorsOf, ReferencesToSubclassesOf가 포함됩니다.

쿼리가 빈 결과 집합을 반환하는 것은 오류가 아닙니다. ExecQuery 메서드는 strQuery 인수에서 키 속성이 요청되었는지 여부에 관계없이 키 속성을 반환합니다. 이 메서드를 실행할 때 오류가 발생하고 wbemFlagReturnImmediately 플래그를 사용하지 않는 경우 반환된 개체 집합에 액세스할 때까지 Err 개체가 설정되지 않습니다. 그러나 wbemFlagReturnWhenComplete 플래그를 사용하는 경우 ExecQuery 메서드가 호출되면 Err 개체가 설정됩니다.

WQL 쿼리에 사용할 수 있는 ANDOR 키워드의 수에는 제한이 있습니다. 복잡한 쿼리에 사용되는 WQL 키워드가 많으면 WMI가 WBEM_E_QUOTA_VIOLATION 오류 코드를 HRESULT 값으로 반환할 수 있습니다. WQL 키워드의 제한은 쿼리가 얼마나 복잡한지에 따라 달라집니다.

예제

다음 VBScript 코드 예제에서는 로컬 컴퓨터에서 모든 디스크 드라이브를 찾고 디바이스 ID 및 디스크 드라이브의 유형을 표시합니다.

Set colDisks = GetObject( _
    "Winmgmts:").ExecQuery("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
 
    Select Case objDisk.DriveType
        Case 1
            Wscript.Echo "No root directory. Drive type could not be determined."
        Case 2
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Removable drive" 
        Case 3
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Local hard disk" 
        Case 4
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Network disk" 
        Case 5
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Compact disk" 
        Case 6
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = RAM disk" 
        Case Else
            Wscript.Echo "Drive type could not be determined."
    End Select
Next

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows Vista
지원되는 최소 서버
Windows Server 2008
헤더
Wbemdisp.h
유형 라이브러리
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

추가 정보

SWbemServices

SWbemServices.Get

WQL을 사용하여 쿼리

WMI 스크립트 만들기

WMI 열거