Memanggil Metode WMI
WMI menyediakan metode dalam COM API dan scripting API untuk mendapatkan informasi atau memanipulasi objek dalam sistem perusahaan. Misalnya, metode pembuatan skrip WMI kueri SWbemServices.ExecQuery untuk data. Penyedia juga memiliki metode yang ditentukan dalam kelas yang mereka daftarkan. Contohnya adalah metode Win32_LogicalDiskChkdsk dan ScheduleAutoChk yang disediakan oleh penyedia Win32.
Bagian berikut dibahas dalam topik ini:
Metode WMI Dibandingkan dengan Metode Penyedia
Dengan menggunakan panggilan metode WMI yang dikombinasikan dengan panggilan metode penyedia , Anda dapat mengambil dan memanipulasi informasi tentang perusahaan Anda. Untuk informasi selengkapnya, lihat Memanggil Metode WMI dan Memanggil Metode Penyedia.
Metode objek pembuatan skrip WMI SWbemObject memiliki status khusus karena dapat berlaku untuk kelas data WMI apa pun. Untuk informasi selengkapnya, lihat Pembuatan Skrip dengan SWbemObject.
Contoh kode berikut memanggil metode WMI dan penyedia.
Metode WMI dan penyedia berikut terletak di Scripting API untuk WMI:
- objWMIService.ExecQuery memanggil metode pembuatan skrip WMI SWbemServices.ExecQuery
- objService.StopService() memanggil metode penyedia Win32_Service.StopService
Anda dapat mencari kode yang mungkin muncul di "Kembalikan" di bagian Kode Pengembalian untuk Win32_Service.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'")
For Each objService in colServices
Return = objService.StopService()
If Return <> 0 Then
Wscript.Echo "Failed " &VBNewLine & "Error code = " & Return
Else
WScript.Echo "Succeeded"
End If
Next
$colServices= Get-WmiObject -Class Win32_Service -Filter 'Name = "Alerter"'
foreach ($objService in $colServices)
{
$objService.StopService()
}
Mode Method-Calling di WMI
Mode panggilan semisinkron biasanya memberikan keseimbangan terbaik antara keamanan dan performa.
Untuk informasi selengkapnya tentang setiap mode yang mungkin, lihat yang berikut ini:
Mode Sinkron
Mode sinkron terjadi ketika program atau skrip dijeda hingga panggilan metode mengembalikan objek koleksi SWbemObjectSet . WMI membangun koleksi ini dalam memori sebelum mengembalikan objek koleksi ke program atau skrip panggilan.
Mode sinkron dapat memiliki efek buruk dari program atau performa skrip pada komputer yang menjalankan program atau skrip. Misalnya, secara sinkron mengambil ribuan peristiwa dari log peristiwa dapat memakan waktu lama dan menggunakan banyak memori karena WMI membuat objek dari setiap peristiwa dan kemudian memasukkan objek tersebut ke dalam koleksi sebelum meneruskan koleksi ke metode .
Anda seharusnya hanya memanggil metode yang tidak mengembalikan himpunan data besar dalam mode sinkron. Metode SWbemServices berikut dapat dipanggil dengan aman dalam mode sinkron:
Setiap metode SWbemServices tanpa kata , "Async" dalam nama dapat dipanggil dalam mode sinkron dengan mengatur nilai wbemFlagReturnWhenComplete dalam parameter iFlags .
Mode Asinkron
Mode asinkron terjadi ketika program atau skrip terus berjalan setelah memanggil metode . WMI mengembalikan semua objek dari metode ke objek SWbemSink saat setiap objek dibuat. Program atau skrip panggilan harus memiliki objek SWbemSink dan penanganan aktivitas SWbemSink.OnObjectReady untuk memproses objek yang dikembalikan. Untuk informasi selengkapnya tentang membuat penanganan aktivitas untuk mode asinkron, lihat Menerima Peristiwa WMI.
Meskipun mode ini tidak memiliki performa dan penalti sumber daya mode sinkron, mode asinkron dapat menciptakan risiko keamanan yang serius karena hasil yang disimpan dalam objek SWbemSink mungkin tidak berasal dari program atau skrip panggilan. WMI menurunkan tingkat autentikasi pada objek SWbemSink hingga metode berhasil. Untuk informasi selengkapnya tentang cara mengurangi risiko keamanan ini, lihat Mengatur Keamanan pada Panggilan Asinkron.
Metode yang ditambahkan dengan kata Asinkron adalah metode untuk mode asinkron. Metode berikut adalah panggilan asinkron:
- SWbemServices.AssociatorsOfAsync
- SWbemServices.DeleteAsync
- SWbemServices.ExecMethodAsync
- SWbemServices.ExecNotificationQueryAsync
- SWbemServices.ExecQueryAsync
- SWbemServices.InstancesOfAsync
- SWbemServices.ReferencesToAsync
- SWbemServices.SubclassesOfAsync
Untuk informasi selengkapnya tentang mode asinkron, lihat:
Mode Semisinkron
Mode semisinkron mirip dengan mode asinkron karena program atau skrip terus berjalan setelah memanggil metode . Dalam mode semisinkron, WMI mengambil objek di latar belakang saat skrip atau program Anda terus berjalan. WMI mengembalikan setiap objek yang dikembalikan ke metode panggilan tepat setelah objek dibuat.
Karena WMI mengelola objek, mode semisinkron lebih aman daripada mode asinkron. Namun, jika Anda menggunakan mode semisinkron dengan lebih dari 1.000 instans, pengambilan instans dapat memonopoli sumber daya yang tersedia, yang dapat menurunkan performa program atau skrip dan komputer menggunakan program atau skrip. Setiap objek mengambil sumber daya yang diperlukan sampai memori dilepaskan.
Untuk mengatasi kondisi ini, Anda dapat memanggil metode dengan parameter iFlags yang diatur dengan bendera wbemFlagForwardOnly dan wbemFlagReturnImmediately untuk menginstruksikan WMI mengembalikan SWbemObjectSet khusus maju. SWbemObjectSet khusus maju menghilangkan masalah performa yang disebabkan oleh himpunan data besar dengan merilis memori setelah objek dijumlahkan.
Metode SWbemServices apa pun yang tidak dapat dipanggil dalam mode sinkron atau asinkron dipanggil dalam mode semisinkron.
Metode berikut dipanggil dalam mode semisinkron:
- SWbemServices.AssociatorsOf
- SWbemServices.Delete
- SWbemServices.ExecMethod
- SWbemServices.ExecNotificationQuery
- SWbemServices.ExecQuery
- SWbemServices.Get
- SWbemServices.InstancesOf
- SWbemServices.ReferencesTo
- SWbemServices.SubclassesOf
- SWbemServices.Put
Untuk informasi selengkapnya tentang mode semisinkron, lihat Melakukan Panggilan Semisinkron dengan C++ dan Melakukan Panggilan Semisinkron dengan VBScript.
Topik terkait