从 WMI 集合中删除多个项
如果尝试删除集合中的多个项,你可能会发现某些项不会被删除。 删除项时无法循环访问集合,因为从集合中删除元素时,集合指针将移到下一个元素。 例如,尝试从集合中删除所有项会导致删除所有其他项。 使用 SWbemQualifierSet.Remove 或 SWbemPropertySet.Remove 方法删除项时,可能会出现此问题。 可以通过循环访问集合并将要删除的项的名称置于数组中来避免此问题。 然后,可以循环访问数组并删除数组中命名的项。 集合(如 SWbemNamedValueSet、SWbemPrivilegeSet和 SWbemRefresher)也具有删除刷新器容器中的所有项的方法。
以下脚本演示如何从集合中删除多个项。
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
不能删除具有继承属性的类实例或派生类中的属性和限定符。 此类删除尝试引发错误,并且不会删除属性或限定符;相反,WMI 会将属性或限定符重置为默认值。 对于具有继承属性的派生类,WMI 会将继承的属性重置为父类中属性的默认值。
有关详细信息,请参阅 操作类和实例信息、访问集合,以及 从集合中删除单个项。