【问题标题】:Display Progress while Restoring Database with PowerShell and SMO使用 PowerShell 和 SMO 还原数据库时显示进度
【发布时间】:2011-03-29 00:53:15
【问题描述】:

我有一个使用 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);
}

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: sql-server powershell event-handling smo


    【解决方案1】:

    经过更深入的搜索,我终于在文档中找到了它。要添加事件处理程序,您需要执行以下操作:

    导入相关程序集;

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

    希望这可以帮助其他尝试这样做的人!

    【讨论】:

    • 干得好 :) 我想在分配给处理程序时不需要强制转换脚本块。
    • 你可以使用 Write-Progress 而不是 Write-Host。
    • 感谢您添加此详细信息。非常有帮助,因为我正在研究其他示例
    【解决方案2】:

    您可以在 v1 powershell -http://pseventing.codeplex.com 中使用 pseventing 实现异步风格。随时检查进度,而不是等待。 v2 powershell 有自己的事件。

    我在 pseventing 中包含一个脚本,以完全按照您所说的去做,除了以后台方式。

    -奥辛

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      相关资源
      最近更新 更多