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는 상속된 속성을 부모 클래스의 속성 기본값으로 다시 설정합니다.
자세한 내용은 클래스 및 인스턴스 정보 조작, 컬렉션 액세스 및 컬렉션에서 단일 항목 제거를 참조하세요.