Po głębszym przeszukaniu znalazłem go w dokumentacji. Aby dodać moduły obsługi zdarzeń, należy wykonać następujące czynności:
Zaimportować odpowiednie zespoły;
[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
Teraz, aby utworzyć procedurę obsługi zdarzenia, należy ją zadeklarować za pomocą funkcji inline;
$percentEventHandler = [Microsoft.SqlServer.Management.Smo.PercentCompleteEventHandler] { Write-Host "Restored " $_.Percent "%" }
$completedEventHandler = [Microsoft.SqlServer.Management.Common.ServerMessageEventHandler] { Write-Host "Database " $databasename " Created Successfuly!" }
Teraz ostatnim krokiem jest dodanie obsługi zdarzeń do obiektu, z którym pracujesz. Zwykle w języku C# wystarczy wykonać następujące czynności;
restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete);
restore.Complete += new Microsoft.SqlServer.Management.Common.ServerMessageEventHandler(restore_Complete);
To nie zadziała w skryptu PowerShell, co trzeba zrobić, to skorzystać z funkcji dodawania wygenerowanego zdarzenia. Nazwa funkcji to EventHandlerName z dopiskiem "add_" dołączonym na początku, tak jak;
$dbRestore.add_PercentComplete($percentEventHandler)
$dbRestore.add_Complete($completedEventHandler)
Mam nadzieję, że to pomoże każdemu, kto spróbuje to zrobić!
Dobra robota :) Myślę, że to nie jest potrzebne do oddania scriptblocks podczas przypisywania do ładowarki. – stej
Można użyć Write-Progress zamiast Write-Host. – JasonMArcher
dzięki za dodanie tego szczegółu. bardzo pomocny, gdy pracowałem nad innymi przykładami – SheldonH