Partager via


Suppression de plusieurs éléments d’une collection WMI

Si vous tentez de supprimer plusieurs éléments d’une collection, vous pouvez constater que certains éléments ne sont pas supprimés. Vous ne pouvez pas itérer une collection lors de la suppression d’éléments, car lorsque vous supprimez un élément d’une collection, le pointeur de la collection est déplacé vers l’élément suivant. Par exemple, une tentative de suppression de tous les éléments d’une collection entraîne la suppression de tous les autres éléments. Vous pouvez rencontrer ce problème lorsque vous supprimez des éléments avec les méthodes SWbemQualifierSet.Remove ou SWbemPropertySet.Remove. Vous pouvez éviter ce problème en parcourant la collection et en mettant les noms des éléments à supprimer dans un tableau. Vous pouvez ensuite parcourir le tableau et supprimer les éléments nommés dans le tableau. Les collections, telles que SWbemNamedValueSet, SWbemPrivilegeSetet SWbemRefresher, ont également une méthode qui supprime tous les éléments du conteneur d’actualisation.

Le script suivant montre comment supprimer plusieurs éléments d’une collection.

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

Vous ne pouvez pas supprimer des propriétés et des qualificateurs dans une instance de classe ou une classe dérivée qui a des propriétés héritées. Une telle tentative de suppression déclenche une erreur et la propriété ou le qualificateur n’est pas supprimé ; À la place, WMI réinitialise la propriété ou le qualificateur à la valeur par défaut. Dans le cas d’une classe dérivée avec des propriétés héritées, WMI réinitialise la propriété héritée à la valeur par défaut de la propriété dans la classe parente.

Pour plus d'informations, consultez Manipulation des informations de classe et d'instance, Accès à une collection, et Suppression d'un élément unique d'une collection.