Отображение хода выполнения при восстановлении базы данных с помощью PowerShell и SMO ​​

У меня есть скрипт для восстановления базы данных с помощью 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);
}

. Любая помощь будет признательна.

Спасибо.

9
задан Boris Modylevsky 26 September 2017 в 06:40
поделиться

2 ответа

После более глубокого поиска я наконец нашел его в документации. Чтобы добавить обработчики событий, вам необходимо сделать следующее:

Импортировать соответствующие сборки;

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

Надеюсь, это поможет любому, кто пытается это сделать!

16
ответ дан 4 December 2019 в 12:15
поделиться

Вы можете сделать это в асинхронном стиле с помощью pseventing в PowerShell версии 1 - http://pseventing.codeplex.com . проверяйте прогресс, когда захотите, вместо того, чтобы ждать. v2 powershell имеет собственное событие.

Я включаю сценарий в pseventing, чтобы делать именно то, что вы говорите, за исключением фонового режима.

-Oisin

1
ответ дан 4 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: