una script restaurar restauracion respaldo que por para necesario hacer datos cuando copia codigo sql-server powershell event-handling smo

sql server - script - Mostrar el progreso al restaurar la base de datos con PowerShell y SMO



script para restaurar base de datos sql server (2)

Tengo un script para restaurar una base de datos con PowerShell y SMO. Ahora sé que puedo pasar un controlador de eventos a PercentComplete en el objeto de restauración y obtener el progreso de la restauración a medida que ocurre. El problema es que no sé cómo crear un controlador de eventos y pasarle una función en PowerShell. Puedo hacerlo en C #

restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete); static void restore_PercentComplete(object sender, PercentCompleteEventArgs e) { System.Console.WriteLine("{0}", e.Percent); }

Cualquier ayuda sería apreciada.

Gracias.


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:

Importar los ensamblajes relevantes;

[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.


Puede hacerlo con estilo asincrónico con pseventing en v1 powershell - http://pseventing.codeplex.com . verifique el progreso siempre que lo desee en lugar de esperar. v2 powershell tiene su propio evento.

Incluyo un script en pseventing para hacer exactamente lo que dices, excepto de forma secundaria.

-Oisin