Een semisynchrone aanroep maken met VBScript
Sommige WMI-methoden kunnen grote verzamelingen retourneren, waardoor scripts niet meer reageren. In het script is semisynchrone toegang de standaardinstelling. en WMI (Windows Management Instrumentation) stelt wbemFlagReturnImmediately voor aanroepen die grote objectverzamelingen kunnen retourneren, zoals de volgende SWbemServices methoden: InstancesOf, SubklassenOf, ExecQuery, AssociatorsOfen ReferencesTo.
Semisynchrone toegang die gebruikmaakt van wbemFlagReturnImmediately ingesteld in de parameter IFlags is ook de standaardinstelling voor aanroepen die grote objectsets kunnen retourneren voor de volgende SWbemObject methoden: Instances_, Subclasses_, Associators_en References_.
Als u het gebruik van WMI-geheugenresources wilt verminderen bij het verwerken van een grote verzameling objecten, neemt u de waarde van wbemFlagForwardOnly- op in de parameter IFlags. Als u wbemFlagForwardOnly gebruikt, creƫert WMI een alleen-doorstuur enumerator die het terugspoelen van de verzameling niet toestaat en het items opnieuw benaderen onmogelijk maakt.
WMI elimineert het geheugen voor elk object omdat de instructie For Each een object verwerkt. U kunt de methode Count niet aanroepen voor een verzameling wanneer de vlag wbemFlagForwardOnly is ingesteld op de aanroep die de verzameling heeft verkregen. Let op dat de parameter IFlags de waarden wbemFlagReturnImmediately en wbemFlagForwardOnly automatisch ingesteld heeft voor de methode SWbemServices.ExecNotificationQuery.
In de volgende procedure wordt beschreven hoe u VBScript gebruikt om een semisynchrone aanroep te maken.
Een semisynchrone aanroep uitvoeren in VBScript-
- Stel de parameter IFlags in op de waarde van wbemFlagReturnImmediately.
- Maak de normale synchrone aanroep voor SWbemServices.ExecQuery of SWbemServices.ExecNotificationQuery met de waarde van de iFlags.
- Als u de objecten wilt behandelen die door de aanroep worden geretourneerd als een verzameling, gebruikt u een opsommingssyntaxis zoals VBScript Voor elke. Wanneer elk object wordt geretourneerd, wordt het verwerkt als het volgende item in de verzameling.
- Maak een alleen-vooruit-enumerator door de waarde van wbemFlagReturnImmediately te combineren met de waarde van wbemFlagForwardOnly. De decimale waarde van deze OR-bewerking is 48. Deze constanten worden gedefinieerd in de wbemdisp.tlb-typebibliotheek voor Visual Basic. De meeste scripttalen gebruiken de numerieke waarde of definiƫren een constante. Zie WbemFlagEnumvoor meer informatie.
In het volgende codevoorbeeld ziet u hoe u een semisynchrone methodeaanroep maakt. Zie Een methode aanroepenvoor meer informatie.
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
Verwante onderwerpen