Delen via


Meerdere items verwijderen uit een WMI-verzameling

Als u meer dan één item in een verzameling probeert te verwijderen, is het mogelijk dat sommige items niet worden verwijderd. U kunt een verzameling niet herhalen tijdens het verwijderen van items, omdat wanneer u een element uit een verzameling verwijdert, de aanwijzer naar het volgende element wordt verplaatst. Een poging om alle items uit een verzameling te verwijderen, resulteert bijvoorbeeld in het verwijderen van elk ander item. Dit probleem kan optreden wanneer u items verwijdert met de SWbemQualifierSet.Remove of SWbemPropertySet.Remove methoden. U kunt dit probleem voorkomen door de verzameling te doorlopen en de namen van de te verwijderen items in een array te plaatsen. Vervolgens kunt u de matrix doorlopen en de items verwijderen die in de matrix zijn genoemd. De verzamelingen, zoals SWbemNamedValueSet, SWbemPrivilegeSeten SWbemRefresher, hebben ook een methode waarmee alle items in de vernieuwingscontainer worden verwijderd.

In het volgende script ziet u hoe u verschillende items uit een verzameling verwijdert.

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

U kunt geen eigenschappen en kwalificaties verwijderen in een klasse-exemplaar of afgeleide klasse die overgenomen eigenschappen heeft. Een dergelijke verwijderingspoging veroorzaakt een fout en de eigenschap of kwalificatie wordt niet verwijderd; In plaats daarvan stelt WMI de eigenschap of kwalificatie opnieuw in op de standaardwaarde. In het geval van een afgeleide klasse met overgenomen eigenschappen stelt WMI de overgenomen eigenschap opnieuw in op de standaardwaarde van de eigenschap in de bovenliggende klasse.

Zie voor meer informatie Het bewerken van klasse- en exemplaargegevens, het openen van een verzamelingen het verwijderen van één item uit een verzameling.