共用方式為


從 WMI 集合移除多個項目

如果您嘗試移除集合中的多個專案,您可能會發現某些項目並未移除。 您無法在移除專案時反覆運算集合,因為當您從集合中移除專案時,集合指標會移至下一個專案。 例如,嘗試從集合中移除所有專案會導致移除所有其他專案。 當您使用 SWbemQualifierSet.RemoveSWbemPropertySet.Remove 方法移除項目時,可能會看到此問題。 您可以透過迴圈遍歷集合,並將要移除的項目名稱放入陣列中,來避免這個問題。 然後,您可以迴圈遍歷陣列,並刪除陣列中指定名稱的專案。 集合,例如 SWbemNamedValueSetSWbemPrivilegeSetSWbemRefresher,也有一個方法可刪除重新整理器容器中的所有專案。

下列腳本說明如何從集合中移除數個項目。

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

您不能在具有繼承屬性的類別實例或衍生類別中移除屬性和限定符。 這類刪除嘗試會引發錯誤,而且不會移除屬性或限定符;相反地,WMI 會將 屬性或限定符重設為預設值。 如果是具有繼承屬性的衍生類別,WMI 會將繼承的屬性重設為父類別中屬性的預設值。

如需詳細資訊,請參閱 操作類別和實例資訊存取集合,以及 從集合移除單一項目