VBScript를 사용하여 반동기적 호출 수행

일부 WMI 메서드는 큰 컬렉션을 반환하여 스크립트의 응답을 중지할 수 있습니다. 스크립트에서 반동기 액세스는 기본값이며 WMI(Windows Management Instrumentation)는 다음 SWbemServices 메서드와 같은 큰 개체 컬렉션을 반환할 수 있는 호출에 대해 wbemFlagReturnImmediately를 설정합니다. InstancesOf, SubclassesOf, ExecQuery, AssociatorsOfReferencesTo.

IFlags 매개 변수에서 wbemFlagReturnImmediately를 사용하는 반동기적 액세스는 다음 SWbemObject 메서드에 대해 큰 개체 집합을 반환할 수 있는 호출의 기본값이기도 합니다. Instances_, Subclasses_, Associators_References_.

대량의 개체 컬렉션을 처리할 때 WMI 메모리 리소스 사용량을 줄이려면 IFlags 매개 변수에 wbemFlagForwardOnly 값을 포함합니다. wbemFlagForwardOnly를 사용하면 WMI가 컬렉션을 되감고 항목에 다시 액세스하는 것을 허용하지 않는 정방향 전용 열거자를 만듭니다.

WMI는 For Each 문이 개체를 처리할 때 각 개체에 대한 메모리를 제거합니다. 컬렉션을 가져온 호출에서 wbemFlagForwardOnly 플래그가 설정된 경우 컬렉션에 대해 Count 메서드를 호출할 수 없습니다. IFlags 매개 변수에는 wbemFlagReturnImmediatelywbemFlagForwardOnlySWbemServices.ExecNotificationQuery 메서드에 대해 기본적으로 설정됩니다.

다음 절차에서는 VBScript를 사용하여 반동기적 호출을 만드는 방법을 설명합니다.

VBScript에서 반동기적 호출

  1. wbemFlagReturnImmediately 값에 IFlags 매개 변수를 설정합니다.
  2. iFlags 값을 사용하여 SWbemServices.ExecQuery 또는 SWbemServices.ExecNotificationQuery에 대한 일반적인 동기적 호출을 만듭니다.
  3. 호출에서 반환된 개체를 컬렉션으로 처리하려면 VBScript For Each와 같은 열거형 구문을 사용합니다. 각 개체가 반환될 때 컬렉션의 다음 항목으로 처리됩니다.
  4. wbemFlagReturnImmediately 값을 wbemFlagForwardOnly 값과 결합하여 정방향 전용 열거자를 만듭니다. 이 OR 작업의 10진수 값은 48입니다. 이러한 상수는 Visual Basic용 wbemdisp.tlb 형식 라이브러리에 정의됩니다. 대부분의 스크립팅 언어는 숫자 값을 사용하거나 상수를 정의합니다. 자세한 내용은 WbemFlagEnum를 참조하세요.

다음 코드 예제에서는 반동기 메서드 호출을 만드는 방법을 보여 줍니다. 자세한 내용은 메서드 호출을 참조하세요.

wbemFlagReturnImmediately = 16
wbemFlagForwardOnly = 32
IFlags = wbemFlagReturnImmediately + wbemFlagForwardOnly
WScript.Echo IFlags
Set objWMIService = GetObject("winmgmts:root\cimv2")
' Query for all the Win32_Process objects on the 
'     local computer and use forward-only enumerator
Set colProcesses = objWMIService.ExecQuery("SELECT Name FROM Win32_Process",,IFlags)
' Receive each object as it arrives
For Each objProcess in colProcesses
    WScript.Echo objProcess.Name
Next

메서드 호출