У меня возникают проблемы при попытке выполнить цикл и удалить 91 компонент из моего приложения COM+.
Это мой код Powershell:
$app = $apps | Where-Object {$_.Name -eq 'pkgAdap2'}
$compColl = $apps.GetCollection("Components", $app.Key)
$compColl.Populate()
$index = 0
foreach($component in $compColl) {
$compColl.Remove($index)
$compColl.SaveChanges()
$index++
}
Код работает, но он удаляет только ПОЛОВИНУ компонентов, а для остальных $index
цикл возвращает эту ошибку:
Value does not fall within the expected range.
At line:4 char:5
+ $compColl.Remove($index)
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException
Поэтому я продолжаю запускать его, и количество оставшихся компонентов уменьшается вдвое.
Я думаю, причина в том, что массив/коллекция, которую я «удаляю», повторно сортирует оставшиеся индексы, каждый раз перемещая их. Так что я прохожу только половину, прежде чем $index
выходит за пределы досягаемости. Это единственное, что я могу понять, это делать это. Таким образом, я также попробовал другой подход:
while($compColl.Count > 0) {
$compColl.Remove($compColl.Count)
}
Но это тоже не работает.
Кто-нибудь знает, как удалить все компоненты сразу?