2010-08-12 12 views
9

Ich habe ein Skript zum Wiederherstellen einer Datenbank mit PowerShell und SMO. Jetzt weiß ich, dass ich eine Event-Handler in PercentComplete für das Wiederherstellungsobjekt übergeben kann und den Fortschritt der Wiederherstellung erhalten, wie es passiert. Das Problem ist, ich weiß nicht, wie man einen Event-Handler erstellen und ihm eine Funktion in PowerShell übergeben? Ich kann es in C tun #Fortschritt beim Wiederherstellen der Datenbank mit PowerShell und SMO anzeigen

restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete); 

static void restore_PercentComplete(object sender, PercentCompleteEventArgs e) 
{ 
    System.Console.WriteLine("{0}", e.Percent); 
} 

Jede Hilfe wäre willkommen.

Vielen Dank.

Antwort

16

Nach einigem tieferem Suchen fand ich es schließlich in der Dokumentation. Um Ereignishandler hinzuzufügen, müssen Sie Folgendes tun:

Importieren Sie die relevanten Baugruppen;

Jetzt zum Erstellen des Ereignishandlers müssen Sie es mit einer Inline-Funktion deklarieren;

Jetzt ist der letzte Schritt, den Ereignishandler zu dem Objekt hinzuzufügen, mit dem Sie arbeiten. Normalerweise machen Sie in C# nur folgendes;

restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete); 
restore.Complete += new Microsoft.SqlServer.Management.Common.ServerMessageEventHandler(restore_Complete); 

arbeiten Dies wird nicht in Powershell-Skript, müssen, was Sie ist die erzeugte Funktion Ereignissen tun verwenden hinzuzufügen. Der Funktionsname ist der EventHandlerName, an den "add_" angehängt ist.

$dbRestore.add_PercentComplete($percentEventHandler) 
$dbRestore.add_Complete($completedEventHandler) 

Hoffe das hilft jedem, der das versucht!

+1

Gute Arbeit :) Ich denke, es ist nicht die scriptblocks gegossen wird benötigt, wenn der Handler zuweisen. – stej

+2

Sie könnten Write-Progress anstelle von Write-Host verwenden. – JasonMArcher

+0

danke für das Hinzufügen dieses Details. sehr hilfreich, als ich durch andere Beispiele arbeitete – SheldonH

1

Sie können es asynchronen Stil mit pseventing in v1 Powershell tun - http://pseventing.codeplex.com. Überprüfen Sie den Fortschritt wann immer Sie wollen, anstatt zu warten. v2 powershell hat eine eigene Vielseitigkeit.

Ich schließe ein Skript in pseventing ein, um genau das zu tun, was Sie sagen, außer im Hintergrund.

-Oisin

Verwandte Themen