Я написал скрипт Powershell, который сравнивает две базы данных и предлагает список объектов в одной из баз данных, которые нужно удалить. Я помещаю эти элементы (как настраиваемый объект с именем и схемой) в массив.
На следующем шаге моего сценария я перебираю объекты в базе данных и проверяю, соответствуют ли они объекту в моем массиве. Если я нахожу совпадение, тогда я выбрасываю объект из своей базы данных. Однако проблема, с которой я столкнулся, заключалась в том, что если я пытаюсь отбросить объект, то коллекция, через которую я перебираю, изменяется, и я получаю сообщение об ошибке, что коллекция изменилась, и IEnumerable не будет работать, когда это произойдет.
Я пытался сделать копию коллекции, но я не могу поместить ее в массив, используя метод CopyTo. Есть предложения?
Мой текущий код ниже. Когда я запускаю это, массив $ sprocs пуст.
function DropSQLObjects
{
param([object]$database, [object]$objectsToDrop)
$sprocs = @()
$database.StoredProcedures.CopyTo($sprocs, 0)
# If I do a $sprocs | out-host I see that the array is still empty
foreach ($objectToDrop in $objectsToDrop)
{
foreach ($sproc in $sprocs)
{
if ($sproc.Name -eq $objectToDrop.Name -and $sproc.Schema -eq $objectToDrop.Schema)
{
$sproc.Drop()
LogToSQL $database "Dropped Stored Procedure: $($objectToDrop.Schema).$($objectToDrop.Name)"
}
}
}
}