Compartilhar via


Removendo vários itens de uma coleção do WMI

Caso tente remover mais de um item em uma coleção, poderá descobrir que alguns itens não foram removidos. Não é possível iterar uma coleção ao remover itens porque, ao remover um elemento de uma coleção, o ponteiro da coleção é movido para o próximo elemento. Por exemplo, uma tentativa de remover todos os itens de uma coleção resulta na remoção de todos os outros itens. Visualize esse problema ao remover itens com os métodos SWbemQualifierSet.Remove ou SWbemPropertySet.Remove. Evite esse problema executando um loop pela coleção e colocando os nomes dos itens a serem removidos em uma matriz. Em seguida, execute um loop pela matriz e excluía os itens nomeados na matriz. As coleções, como SWbemNamedValueSet, SWbemPrivilegeSet e SWbemRefresher, também têm um método que exclui todos os itens no contêiner de atualização.

O script a seguir ilustra como remover vários itens de uma coleção.

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

Não é possível remover propriedades e qualificadores em uma instância de classe ou classe derivada que tenha propriedades herdadas. Essa tentativa de exclusão gera um erro e a propriedade ou o qualificador não é removido. Em vez disso, o WMI redefine a propriedade ou o qualificador para o valor padrão. No caso de uma classe derivada com propriedades herdadas, o WMI redefine a propriedade herdada para o valor padrão da propriedade na classe pai.

Para obter mais informações, consulte Manipular informações de classe e instância, Acessar uma coleção e Remover um único item de uma coleção.