經過一番深入的搜索後,我終於在文檔中找到它。要添加事件處理程序,您需要執行以下操作:
導入相關的程序集;
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SmoExtended') | out-null
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.ConnectionInfo') | out-null
現在要創建事件處理程序,您需要使用內聯函數聲明它;
$percentEventHandler = [Microsoft.SqlServer.Management.Smo.PercentCompleteEventHandler] { Write-Host "Restored " $_.Percent "%" }
$completedEventHandler = [Microsoft.SqlServer.Management.Common.ServerMessageEventHandler] { Write-Host "Database " $databasename " Created Successfuly!" }
現在最後一步是將事件處理程序添加到您正在使用的對象中。通常在C#中,您只需執行以下操作;
restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete);
restore.Complete += new Microsoft.SqlServer.Management.Common.ServerMessageEventHandler(restore_Complete);
這在PowerShell腳本中不起作用,您需要做的是使用生成的函數添加事件。函數名是帶有「add_」的EventHandlerName,並附加到它的開頭,就像這樣;
$dbRestore.add_PercentComplete($percentEventHandler)
$dbRestore.add_Complete($completedEventHandler)
希望這可以幫助其他人試圖做到這一點!
好的工作:)我猜這是不需要在分配給處理程序時強制腳本塊。 – stej 2010-08-12 19:40:24
您可以使用Write-Progress而不是Write-Host。 – JasonMArcher 2010-08-13 01:07:55
感謝您添加此詳細信息。在我通過其他例子回顧時非常有幫助 – SheldonH 2017-01-05 16:15:40