共用方式為


使用 VBScript 進行半同步呼叫

某些 WMI 方法可能會傳回大型集合,導致腳本停止回應。 在腳本中,半同步存取是預設模式,並且 Windows Management Instrumentation(WMI)會為能夠傳回大型物件集合的呼叫設定 wbemFlagReturnImmediately,例如以下 SWbemServices 方法:InstancesOfSubclassesOfExecQueryAssociatorsOfReferencesTo

使用 wbemFlagReturnImmediatelyIFlags 參數中設定的半同步存取,也是呼叫的預設值,這些呼叫也可以針對下列 SWbemObject 方法傳回大型物件集:Instances_Subclasses_Associators_References_

若要減少處理大量物件集合時的 WMI 記憶體資源使用量,請在 IFlags 參數中包含 wbemFlagForwardOnly 的值。 使用 wbemFlagForwardOnly 會導致 WMI 建立一個只能順向存取的列舉器,無法倒帶集合重新存取項目。

WMI 會消除每個物件的記憶體,因為 For Each 語句的 會處理物件。 當您在呼叫取得集合時設定了 wbemFlagForwardOnly 旗標,您無法呼叫集合的 Count 方法。 請注意,IFlags 參數在 SWbemServices.ExecNotificationQuery 方法中預設設定為 wbemFlagReturnImmediatelywbemFlagForwardOnly

下列程式描述如何使用 VBScript 進行半同步呼叫。

在 VBScript 中進行半同步呼叫

  1. IFlags 參數設定為 wbemFlagReturnImmediately值。
  2. 使用 iFlags 值,對 SWbemServices.ExecQuerySWbemServices.ExecNotificationQuery 進行一般同步呼叫。
  3. 如果您想要將呼叫傳回的對象視為集合,請使用列舉語法,例如 VBScript For Each。 當每個物件被傳回時,它會被處理成集合中的下一個項目。
  4. 藉由結合 wbemFlagReturnImmediately 值與 wbemFlagForwardOnly值,建立僅限正向列舉器。 這個 OR 作業的十進位值為 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

呼叫函數