Melakukan Panggilan Semisinkron dengan VBScript

Beberapa metode WMI dapat mengembalikan koleksi besar, menyebabkan skrip berhenti merespons. Dalam skrip, akses semisinkron adalah default, dan Windows Management Instrumentation (WMI) menetapkan wbemFlagReturnImmediately untuk panggilan yang dapat mengembalikan koleksi objek besar seperti metode SWbemServices berikut: InstancesOf, SubclassesOf, ExecQuery, AssociatorsOf, dan ReferencesTo.

Akses semisinkron yang menggunakan wbemFlagReturnImmediately diatur dalam parameter IFlags juga merupakan default untuk panggilan yang dapat mengembalikan set objek besar untuk metode SWbemObject berikut: Instances_, Subclasses_, Associators_, dan References_.

Untuk mengurangi penggunaan sumber daya memori WMI saat memproses kumpulan objek yang besar, sertakan nilai wbemFlagForwardOnly dalam parameter IFlags . Menggunakan wbemFlagForwardOnly menyebabkan WMI membuat enumerator khusus maju yang tidak memungkinkan memutar ulang koleksi dan mengakses item lagi.

WMI menghilangkan memori untuk setiap objek karena pernyataan Untuk Setiap memproses objek. Anda tidak dapat memanggil metode Count untuk koleksi ketika bendera wbemFlagForwardOnly diatur pada panggilan yang memperoleh koleksi. Perhatikan bahwa parameter IFlags memiliki wbemFlagReturnImmediately dan wbemFlagForwardOnly yang diatur secara default untuk metode SWbemServices.ExecNotificationQuery .

Prosedur berikut menjelaskan cara menggunakan VBScript untuk melakukan panggilan semisinkron.

Untuk melakukan panggilan semisinkron di VBScript

  1. Atur parameter IFlags ke nilai wbemFlagReturnImmediately.
  2. Lakukan panggilan sinkron normal untuk SWbemServices.ExecQuery atau SWbemServices.ExecNotificationQuery dengan nilai iFlags .
  3. Jika Anda ingin memperlakukan objek yang dikembalikan oleh panggilan sebagai koleksi, gunakan sintaks enumerasi seperti VBScript For Each. Saat setiap objek dikembalikan, objek diproses sebagai item berikutnya dalam koleksi.
  4. Buat enumerator forward-only dengan menggabungkan nilai wbemFlagReturnImmediately dengan nilai wbemFlagForwardOnly. Nilai desimal operasi OR ini adalah 48. Konstanta ini didefinisikan dalam pustaka jenis wbemdisp.tlb untuk Visual Basic. Sebagian besar bahasa skrip menggunakan nilai numerik atau menentukan konstanta. Untuk informasi selengkapnya, lihat WbemFlagEnum.

Contoh kode berikut menunjukkan cara melakukan panggilan metode semisinkron. Untuk informasi selengkapnya, lihat Memanggil Metode.

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

Memanggil Metode