Suppression de plusieurs éléments d’une collection WMI
Si vous tentez de supprimer plusieurs éléments dans une collection, vous constaterez peut-être 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 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 voir 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 effectuant une boucle dans la collection et en plaçant 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, disposent également d’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établit la valeur par défaut de la propriété ou du qualificateur. Dans le cas d’une classe dérivée avec des propriétés héritées, WMI rétablit la valeur par défaut de la propriété héritée de la propriété dans la classe parente.
Pour plus d’informations, consultez manipulation d’informations sur les classes et les instances, accès à une collectionet Suppression d’un seul élément d’une collection.