从 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 会将继承的属性重置为父类中属性的默认值。
有关详细信息,请参阅操作类和实例信息、访问集合和从集合中移除单个项。