使用PowerShell和SMO恢复数据库时显示进度

前端之家收集整理的这篇文章主要介绍了使用PowerShell和SMO恢复数据库时显示进度前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个用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)

希望这有助于其他任何人试图做到这一点!

原文链接:https://www.f2er.com/mssql/75524.html

猜你在找的MsSQL相关文章