Suppression de plusieurs éléments d’une collection WMI
Quand vous tentez de supprimer plusieurs éléments dans une collection, il peut arriver que certains éléments ne soient pas supprimés. Vous ne pouvez pas itérer une collection pendant une opération de suppression d’éléments, car lorsque vous supprimez un élément d’une collection, le pointeur de la collection est déplacé sur l’élément suivant. Par exemple, une tentative de suppression de tous les éléments d’une collection entraîne la suppression de tout autre élément. Vous pouvez rencontrer ce problème quand vous supprimez des éléments avec les méthodes SWbemQualifierSet.Remove ou SWbemPropertySet.Remove. Pour éviter ce problème, créez une boucle dans la collection et ajoutez dans un tableau les noms des éléments à supprimer. Ensuite, créez une boucle dans le tableau et supprimez les éléments nommés dans le tableau. Les collections, comme SWbemNamedValueSet, SWbemPrivilegeSet et 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 génère une erreur et la propriété ou le qualificateur n’est pas supprimé ; au lieu de cela, WMI réinitialise la propriété ou le qualificateur à la valeur par défaut. S’il s’agit 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 seul élément d’une collection.