SWbemServices.ExecNotificationQuery 메서드
SWbemServices 개체의 ExecNotificationQuery 메서드는 이벤트를 수신하는 쿼리를 실행합니다. 호출이 즉시 반환됩니다. 사용자는 이벤트가 도착하면 이벤트의 반환된 열거자를 폴링할 수 있습니다.
이 메서드는 반동기 모드에서 호출됩니다. 자세한 내용은 메서드 호출을 참조하세요.
이 구문에 대한 설명은 스크립팅 API의 문서 규칙을 참조하세요.
구문
objwbemEventsource = .ExecNotificationQuery( _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)
매개 변수
-
strQuery
-
필수 요소. 이벤트 관련 쿼리의 텍스트를 포함하는 문자열입니다. 이 매개 변수는 공백일 수 없습니다. WMI 쿼리 문자열을 빌드하는 방법에 대한 자세한 내용은 WQL을 사용하여 쿼리 및 WQL 참조를 참조하세요.
-
strQueryLanguage [optional]
-
사용할 쿼리 언어를 포함하는 문자열입니다. 지정된 경우 이 값은 "WQL"이어야 합니다.
-
iFlags [optional]
-
쿼리의 동작을 결정하는 정수입니다. 기본값은 wbemFlagReturnImmediately + wbemFlagForwardOnly입니다. 이 매개 변수를 지정하는 경우 이 매개 변수는 wbemFlagReturnImmediately 및 wbemFlagForwardOnly 모두로 설정해야 합니다. 그렇지 않으면 호출이 실패합니다. 이 매개 변수는 다음 값을 허용할 수 있습니다.
-
wbemFlagForwardOnly(32(0x20))
-
정방향 전용 열거자가 반환되도록 합니다. 정방향 전용 열거자는 일반적으로 기존 열거자보다 훨씬 빠르고 메모리를 덜 사용하지만 SWbemObject.Clone_에 대한 호출을 허용하지 않습니다.
-
wbemFlagReturnImmediately (16 (0x10))
-
호출이 즉시 반환되도록 합니다.
objWbemNamedValueSet [optional]
일반적으로 이는 정의되지 않습니다. 그렇지 않으면 요청을 서비스하는 공급자가 사용할 수 있는 컨텍스트 정보를 나타내는 요소가 있는 SWbemNamedValueSet 개체입니다. 그러한 정보를 지원하거나 요구하는 공급자는 인식된 값 이름, 값의 데이터 형식, 허용된 값 및 의미 체계를 문서화해야 합니다.
반환 값
오류가 발생하지 않는 경우 이 메서드는 SWbemEventSource 개체를 반환합니다. 이벤트가 도착하면 SWbemEventSource.NextEvent 메서드를 호출하여 이벤트를 검색할 수 있습니다.
오류 코드
ExecNotificationQuery 메서드가 완료되면 Err 개체에 다음 목록의 오류 코드 중 하나가 포함될 수 있습니다.
-
wbemErrAccessDenied - 2147749891 (0x80041003)
-
현재 사용자는 결과 집합을 볼 권한이 없습니다.
-
wbemErrFailed - 2147749889 (0x80041001)
-
알 수 없는 오류입니다.
-
wbemErrInvalidParameter - 2147749896(0x80041008)
-
잘못된 매개 변수가 지정되었습니다.
-
wbemErrInvalidQuery - 2147749911(0x80041017)
-
쿼리 구문이 잘못되었습니다.
-
wbemErrInvalidQueryType - 2147749912 (0x80041018)
-
요청된 쿼리 언어가 지원되지 않는 경우
-
wbemErrOutOfMemory - 2147749894 (0x80041006)
-
메모리가 부족하여 작업을 완료할 수 없습니다.
설명
SWbemServices.ExecQueryAsync 메서드와 달리 ExecNotificationQuery는 기존 개체가 아니라 이후 이벤트가 생성하는 이벤트 유형 개체를 반환합니다. ExecNotificationQuery가 요청하는 이벤트 개체는 내장 이벤트 개체(예: __InstanceCreationEvent) 또는 외래 이벤트 개체(예: RegistryKeyChangeEvent 또는 SNMP 이벤트와 같은 레지스트리 공급자 이벤트)일 수 있습니다. 자세한 내용은 수신할 이벤트 유형 결정 및 이벤트 알림 받기를 참조하세요.
WQL 쿼리에 사용할 수 있는 AND 및 OR 키워드의 수에는 제한이 있습니다. 복잡한 쿼리에 사용되는 WQL 키워드가 많으면 WMI가 WBEM_E_QUOTA_VIOLATION 오류 코드를 HRESULT 값으로 반환할 수 있습니다. WQL 키워드의 제한은 쿼리가 얼마나 복잡한지에 따라 달라집니다.
예제
다음 VBScript 코드 예제에서는 로컬 컴퓨터의 볼륨 변경 내용을 모니터링합니다. Win32_VolumeChangeEvent는 내장 WMI 정의 이벤트가 아닌 공급자가 정의한 외래 이벤트입니다. 자세한 내용은 수신할 이벤트 유형 결정을 참조하세요.
Set colMonitoredEvents = _
GetObject("Winmgmts:").ExecNotificationQuery_
("Select * from Win32_VolumeChangeEvent")
Do While i = 0
Set strLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo strLatestEvent.DriveName & "Time Created = " _
& strLatestEvent.Time_Created
Select Case strLatestEvent.EventType
Case 1
WScript.Echo "EventType = Configuration Changed"
Case 2
WScript.Echo "EventType = Device Arrival"
Case 3
WScript.Echo "EventType = Device Removal"
Case 4
WScript.Echo "EventType = Docking"
Case Else
WScript.Echo "Unrecognized EventType"
End Select
Loop
다음 VBScript 코드 예제에서는 프로세스 삭제를 모니터링합니다. 작업 관리자에서 프로세스를 삭제하거나 애플리케이션을 사용 중지하면 스크립트에 메시지가 표시됩니다. 이 스크립트는 WMI - __InstanceDeletionEvent가 정의한 내장 이벤트를 쿼리합니다.
Set objWMIService = GetObject( _
"Winmgmts:{impersonationLevel=impersonate}" )
Set colMonitoredProcesses = _
objWMIService.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE " _
& "TargetInstance ISA 'Win32_Process'")
i = 0
Do While i < 11
Set strLatestProcess = colMonitoredProcesses.NextEvent
WScript.Echo strLatestProcess.TargetInstance.Name
WScript.Sleep 10000
i= i + 1
Loop
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 |
Windows Vista |
지원되는 최소 서버 |
Windows Server 2008 |
헤더 |
|
유형 라이브러리 |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |