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