Dela via


Ta bort flera objekt från en WMI-samling

Om du försöker ta bort fler än ett objekt i en samling kan det hända att vissa objekt inte tas bort. Du kan inte iterera en samling när du tar bort objekt. När du tar bort ett element från en samling flyttas samlingspekaren vidare till nästa element. Ett försök att ta bort alla objekt från en samling resulterar till exempel i att alla andra objekt tas bort. Det här problemet kan uppstå när du tar bort objekt med SWbemQualifierSet.Remove eller SWbemPropertySet.Remove methods. Du kan undvika det här problemet genom att loopa igenom samlingen och placera namnen på objekten som ska tas bort i en matris. Sedan kan du loopa igenom matrisen och ta bort objekten med namnet i matrisen. Samlingarna, till exempel SWbemNamedValueSet, SWbemPrivilegeSetoch SWbemRefresher, har också en metod som tar bort alla objekt i uppdateringscontainern.

Följande skript visar hur du tar bort flera objekt från en samling.

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

Du kan inte ta bort egenskaper och kvalificerare i en klassinstans eller härledd klass som har ärvda egenskaper. Ett sådant borttagningsförsök ger upphov till ett fel och egenskapen eller kvalificeraren tas inte bort. I stället återställer WMI egenskapen eller kvalificeraren till standardvärdet. När det gäller en härledd klass med ärvda egenskaper återställer WMI den ärvda egenskapen till standardvärdet för egenskapen i den överordnade klassen.

Mer information finns i Ändra klass- och instansinformation, Åtkomst till en samlingoch Ta bort ett enskilt objekt från en samling.