Después de una búsqueda más profunda finalmente lo encontré en la documentación. Para agregar controladores de eventos, debe hacer lo siguiente:
Importe los ensamblajes pertinentes;
[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
Ahora, para crear el controlador de eventos, debe declararlo con una función en línea;
$percentEventHandler = [Microsoft.SqlServer.Management.Smo.PercentCompleteEventHandler] { Write-Host "Restored " $_.Percent "%" }
$completedEventHandler = [Microsoft.SqlServer.Management.Common.ServerMessageEventHandler] { Write-Host "Database " $databasename " Created Successfuly!" }
Ahora el último paso es agregar el controlador de eventos al objeto con el que está trabajando. Normalmente en C# solo haces lo siguiente;
restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete);
restore.Complete += new Microsoft.SqlServer.Management.Common.ServerMessageEventHandler(restore_Complete);
Esto no funcionará en el script de PowerShell, lo que necesita hacer es usar la función generada para agregar eventos. El nombre de la función es EventHandlerName con "add_" agregado al principio, como tal;
$dbRestore.add_PercentComplete($percentEventHandler)
$dbRestore.add_Complete($completedEventHandler)
¡Espero que esto ayude a cualquier otra persona que intente hacer esto!
Buen trabajo :) supongo que no es necesario para emitir los scriptblocks al asignar a los manipuladores. – stej
Puede usar Write-Progress en lugar de Write-Host. – JasonMArcher
gracias por agregar este detalle. muy útil ya que estaba trabajando a través de otros ejemplos – SheldonH