Freigeben über


Entfernen mehrerer Elemente aus einer WMI-Sammlung

Wenn Sie versuchen, mehrere Elemente in einer Sammlung zu entfernen, stellen Sie möglicherweise fest, dass einige Elemente nicht entfernt werden. Sie können eine Sammlung beim Entfernen von Elementen nicht durchlaufen, da der Sammlungszeiger beim Entfernen eines Elements aus einer Sammlung zum nächsten Element hin verschoben wird. Beispielsweise führt ein Versuch, alle Elemente aus einer Sammlung zu entfernen, dazu, dass jedes zweite Element entfernt wird. Dieses Problem tritt möglicherweise auf, wenn Sie Elemente mit der Methode SWbemQualifierSet.Remove oder SWbemPropertySet.Remove entfernen. Sie können dieses Problem vermeiden, indem Sie die Auflistung mithilfe einer Schleife durchlaufen und die Namen der zu entfernenden Elemente in ein Array einfügen. Anschließend können Sie das Array durchlaufen und die im Array angegebenen Elemente löschen. Die Sammlungen (beispielsweise SWbemNamedValueSet, SWbemPrivilegeSet und SWbemRefresher) verfügen auch über eine Methode, die alle Elemente im Aktualisierungscontainer löscht.

Das folgende Skript zeigt, wie mehrere Elemente aus einer Auflistung entfernt werden:

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

Sie können keine Eigenschaften und Qualifizierer in einer Klasseninstanz oder in einer abgeleiteten Klasse entfernen, die über geerbte Eigenschaften verfügt. Ein solcher Löschversuch löst einen Fehler aus, und die Eigenschaft oder der Qualifizierer wird nicht entfernt. Stattdessen setzt WMI die Eigenschaft oder den Qualifizierer auf den Standardwert zurück. Im Falle einer abgeleiteten Klasse mit geerbten Eigenschaften setzt WMI die geerbte Eigenschaft auf den Standardwert der Eigenschaft in der übergeordneten Klasse zurück.

Weitere Informationen finden Sie unter Bearbeiten von Klassen- und Instanzinformationen, Zugreifen auf eine Sammlung sowie unter Entfernen eines einzelnen Elements aus einer WMI-Sammlung.