После некоторого более глубокого поиска я наконец нашел это в документации. Чтобы добавить обработчики событий, вам нужно сделать следующее:
Импорт соответствующих сборок;
[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, вам нужно использовать сгенерированную функцию для добавления событий. Имя функции - это EventHandlerName с добавлением «add_» в начале, например:
$dbRestore.add_PercentComplete($percentEventHandler)
$dbRestore.add_Complete($completedEventHandler)
Надеюсь, это поможет кому-то другому, пытающемуся сделать это!