Menghapus Beberapa Item dari Koleksi WMI

Jika Anda mencoba menghapus lebih dari satu item dalam koleksi, Anda mungkin menemukan bahwa beberapa item tidak dihapus. Anda tidak dapat mengulangi koleksi saat menghapus item, karena ketika Anda menghapus elemen dari koleksi, penunjuk koleksi dipindahkan ke elemen berikutnya. Misalnya, upaya untuk menghapus semua item dari koleksi menghasilkan penghapusan setiap item lainnya. Anda mungkin melihat masalah ini saat menghapus item dengan metode SWbemQualifierSet.Remove atau metode SWbemPropertySet.Remove. Anda dapat menghindari masalah ini dengan melakukan iterasi pada koleksi dan memasukkan nama-nama item yang akan dihapus dalam sebuah array. Anda kemudian dapat melakukan iterasi pada array dan menghapus item yang disebutkan dalam array. Koleksi, seperti SWbemNamedValueSet, SWbemPrivilegeSet, dan SWbemRefresher, juga memiliki metode yang menghapus semua item dalam kontainer penyegaran.

Skrip berikut ini menggambarkan cara menghapus beberapa item dari koleksi.

Const WBEM_CIMTYPE_STRING = 8    ' Value for string data type
Dim names()
Redim names (0)
set objSWbemService = GetObject("winmgmts:root\default")
set objClass = ObjSWbemService.Get()

Wscript.Echo "Creating class NewClass"
objClass.Path_.Class = "NewClass"
For i = 1 to 5
    objClass.Properties_.Add "Prop" & i, WBEM_CIMTYPE_STRING
Next
objClass.Put_
Getprops()

' Get all the property names in an array
For Each oprop in objClass.properties_
    Redim Preserve names(Ubound(names)+1)
    names(Ubound(names)-1) = oprop.name
Next
Wscript.Echo "Remove first 3 properties using array of names:"

For i = Lbound(names) to Ubound(names)-1
    If (i < 3) Then
       Wscript.Echo "Removing " & names(i)
       objClass.Properties_.Remove names(i)
    End If
Next

objClass.Put_
Wscript.Echo "Result:"
Getprops()

Sub Getprops()
    Wscript.Echo "Number of properties = " _
        & objClass.Properties_.Count
    For Each oprop in objClass.Properties_
        Wscript.Echo oprop.name
    Next
End Sub

Anda tidak dapat menghapus properti dan kualifikasi dalam instans kelas atau kelas turunan yang memiliki properti yang diwariskan. Upaya penghapusan semacam itu menimbulkan kesalahan dan properti atau kualifikasi tidak dihapus; sebagai gantinya, WMI mengatur ulang properti atau kualifikasi ke nilai default. Dalam kasus kelas turunan dengan properti yang diwariskan, WMI mengatur ulang properti yang diwariskan ke nilai default properti di kelas induk.

Untuk informasi selengkapnya, lihat Memanipulasi Informasi Kelas dan Instansi, Mengakses Koleksi, dan Menghapus Satu Item dari Koleksi.