Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie versuchen, mehrere Elemente in einer Sammlung zu entfernen, stellen Sie möglicherweise fest, dass einige Elemente nicht entfernt werden. Sie können eine Auflistung nicht iterieren, während Sie Elemente entfernen, da beim Entfernen eines Elements der Zeiger der Auflistung zum nächsten Element verschoben wird. Beispielsweise führt ein Versuch, alle Elemente aus einer Auflistung zu entfernen, dazu, dass alle anderen Elemente entfernt werden. Dieses Problem wird möglicherweise angezeigt, wenn Sie Elemente mit den methoden SWbemQualifierSet.Remove oder SWbemPropertySet.Remove entfernen. Sie können dieses Problem vermeiden, indem Sie die Sammlung durchlaufen und die Namen der Zu entfernenden Elemente in ein Array einfügen. Anschließend können Sie das Array durchlaufen und die im Array benannten Elemente löschen. Die Auflistungen wie SWbemNamedValueSet, SWbemPrivilegeSetund SWbemRefresher-verfügen auch über eine Methode, mit der alle Elemente im Aktualisierungscontainer gelöscht werden.
Das folgende Skript veranschaulicht, wie mehrere Elemente aus einer Auflistung entfernt werden.
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
Eigenschaften und Qualifizierer können nicht in einer Klasseninstanz oder abgeleiteten Klasse entfernt werden, die geerbte Eigenschaften enthält. Ein solcher Löschversuch löst einen Fehler aus, und die Eigenschaft oder der Qualifizierer wird nicht entfernt; Stattdessen setzt WMI die Eigenschaft oder den Qualifizierer auf den Standardwert zurück. Bei einer abgeleiteten Klasse mit geerbten Eigenschaften setzt WMI die geerbte Eigenschaft auf den Standardwert der Eigenschaft in der übergeordneten Klasse zurück.
Weitere Informationen finden Sie unter Bearbeiten von Klassen- und Instanzinformationen, Zugreifen auf eine Sammlungund Entfernen eines einzelnen Elements aus einer Auflistung.