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, ReferencesTo 및 SubclassesOf가 포함됩니다.
쿼리가 빈 결과 집합을 반환하는 것은 오류가 아닙니다. ExecQuery 메서드는 strQuery 인수에서 키 속성이 요청되었는지 여부에 관계없이 키 속성을 반환합니다. 이 메서드를 실행할 때 오류가 발생하고 wbemFlagReturnImmediately 플래그를 사용하지 않는 경우 반환된 개체 집합에 액세스할 때까지 Err 개체가 설정되지 않습니다. 그러나 wbemFlagReturnWhenComplete 플래그를 사용하는 경우 ExecQuery 메서드가 호출되면 Err 개체가 설정됩니다.
WQL 쿼리에 사용할 수 있는 AND 및 OR 키워드의 수에는 제한이 있습니다. 복잡한 쿼리에 사용되는 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 |
헤더 |
|
유형 라이브러리 |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |