Sau khi tìm kiếm sâu hơn, cuối cùng tôi đã tìm thấy nó trong tài liệu. Để thêm trình xử lý sự kiện, bạn cần phải làm như sau:
Nhập các hội đồng có liên quan;
[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
Bây giờ để tạo trình xử lý sự kiện, bạn cần khai báo bằng hàm nội tuyến;
$percentEventHandler = [Microsoft.SqlServer.Management.Smo.PercentCompleteEventHandler] { Write-Host "Restored " $_.Percent "%" }
$completedEventHandler = [Microsoft.SqlServer.Management.Common.ServerMessageEventHandler] { Write-Host "Database " $databasename " Created Successfuly!" }
Bây giờ bước cuối cùng là thêm trình xử lý sự kiện vào đối tượng bạn đang làm việc. Thông thường trong C# bạn chỉ cần làm như sau;
restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete);
restore.Complete += new Microsoft.SqlServer.Management.Common.ServerMessageEventHandler(restore_Complete);
Điều này sẽ không hoạt động trong kịch bản PowerShell, những gì bạn cần làm là sử dụng chức năng được tạo để thêm sự kiện. Tên hàm là EventHandlerName với "add_" được thêm vào phần đầu của nó, giống như vậy;
$dbRestore.add_PercentComplete($percentEventHandler)
$dbRestore.add_Complete($completedEventHandler)
Hy vọng điều này sẽ giúp bất kỳ ai khác cố gắng làm điều này!
Làm việc tốt :) Tôi đoán không cần thiết phải bỏ tập lệnh khi gán cho trình xử lý. – stej
Bạn có thể sử dụng Write-Progress thay vì Write-Host. – JasonMArcher
cảm ơn bạn đã thêm chi tiết này. rất hữu ích khi tôi đang làm việc trở lại thông qua các ví dụ khác – SheldonH