我有一个用Power
Shell和SMO恢复数据库的脚本.现在我知道我可以将一个事件处理程序传递给还原对象上的PercentComplete,并获得恢复进度.问题是我不知道如何创建事件处理程序并在PowerShell中传递一个函数?我可以在C#
restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete); static void restore_PercentComplete(object sender,PercentCompleteEventArgs e) { System.Console.WriteLine("{0}",e.Percent); }
任何帮助将不胜感激.
谢谢.
解决方法
经过一番深入的研究,我终于在文档中找到了.要添加事件处理程序,您需要执行以下操作:
导入有关的程序集;
[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)
希望这有助于其他任何人试图做到这一点!