1
我已經編寫了一個Powershell腳本,它將比較兩個數據庫並提供一個要刪除的數據庫中的對象列表。我將這些項目(作爲具有名稱和模式的自定義對象)放入數組中。將SMO集合複製到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)"
}
}
}
}