Untergeordnete Runbooks in Service Manager Automation
Es ist eine bewährte Praxis in der Service Management Automation (SMA), wiederverwendbare, modulare Runbooks mit einer diskreten Funktion zu schreiben, die von anderen Runbooks verwendet werden kann. Ein übergeordnetes Runbook ruft häufig ein oder mehrere untergeordnete Runbooks auf, um die erforderliche Funktionalität auszuführen. Es gibt zwei Möglichkeiten, ein untergeordnetes Runbook aufzurufen, und jede hat deutliche Unterschiede, die Sie verstehen sollten, damit Sie ermitteln können, welche für Ihre unterschiedlichen Szenarien die beste ist.
Aufrufen eines untergeordneten Runbooks mittels Inlineausführung
Um ein Runbook inline über ein anderes Runbook aufzurufen, verwenden Sie den Namen des Runbooks und geben Werte für die zugehörigen Parameter wie bei einer Aktivität oder einem Cmdlet an. Alle Runbooks, die sich in derselben SMA-Umgebung befinden, stehen allen anderen zur Verfügung, um auf diese Weise verwendet zu werden. Das übergeordnete Runbook wartet auf den Abschluss des untergeordneten Runbooks, bevor es mit der nächsten Zeile fortfährt, und sämtliche Ausgaben werden direkt an das übergeordnete Runbook zurückgegeben.
Wenn Sie ein Runbook inline aufrufen, wird es im selben Auftrag ausgeführt wie das übergeordnete Runbook. Das ausgeführte untergeordnete Runbook wird nicht im Auftragsverlauf angezeigt. Alle Ausnahmen und Datenstromausgaben des untergeordneten Runbooks werden dem übergeordneten Runbook zugeordnet. Dies führt zu einer geringeren Anzahl von Aufträgen und macht sie einfacher zu verfolgen und zu beheben, da alle Ausnahmen, die vom untergeordneten Runbook ausgelöst werden, und alle Stream-Ausgaben, die mit dem übergeordneten Runbook-Auftrag verbunden sind.
Wenn ein Runbook veröffentlicht wird, müssen alle untergeordneten Runbooks, die es aufruft, bereits eine veröffentlichte Version haben. Das liegt daran, dass die Automatisierungstechnik bei der Kompilierung eines Runbooks eine Verknüpfung mit allen untergeordneten Runbooks herstellt. Wenn dies nicht der Fall ist, scheint das übergeordnete Runbook ordnungsgemäß zu veröffentlichen, erzeugt aber eine Ausnahme, wenn es gestartet wird. In diesem Fall können Sie das übergeordnete Runbook erneut veröffentlichen, um korrekt auf die untergeordneten Runbooks zu verweisen. Sie brauchen das übergeordnete Runbook nicht neu zu veröffentlichen, wenn eines der untergeordneten Runbooks geändert wird, da die Verknüpfung bereits erstellt wurde.
Die Parameter eines untergeordneten Runbooks, das Inline aufgerufen wird, können beliebige Datentypen sein, einschließlich komplexer Objekte, und es gibt keine JSON-Serialisierung wie beim Starten des Runbooks über das Verwaltungsportal oder mit dem Cmdlet Start-SmaRunbook.
Runbooktypen
Ein Runbook kann nur ein anderes Runbook desselben Typs als untergeordnetes Runbook mit Inline-Ausführung verwenden. Das bedeutet, dass ein PowerShell Workflow Runbook kein PowerShell Runbook als ein untergeordnetes Element verwenden kann, das die Inline-Ausführung verwendet, und ein PowerShell Runbook kann kein PowerShell Workflow-Runbook verwenden.
Wenn Sie ein untergeordnetes PowerShell Workflow-Runbook mit Inline-Ausführung aufrufen, verwenden Sie einfach den Namen des Runbook. Wenn Sie ein untergeordnetes PowerShell Runbook aufrufen, müssen Sie seinem Namen .\ voranstellen, um anzugeben, dass sich das Skript im lokalen Verzeichnis befindet.
Beispiel
Im folgenden Beispiel wird ein untergeordnetes Testrunbook aufgerufen, das drei Parameter akzeptiert – ein komplexes Objekt, eine ganze Zahl und einen booleschen Wert. Die Ausgabe des untergeordneten Runbooks wird einer Variablen zugewiesen. In diesem Fall ist das untergeordnete Runbook ein PowerShell-Workflow-Runbook.
$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = Test-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true
Es folgt dasselbe Beispiel mit einem PowerShell-Skript-Runbook als untergeordnetes Element.
$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = .\Test-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true
Starten eines untergeordneten Runbook mit Cmdlets
Sie können das Cmdlet Start-SMARunbook verwenden, um ein Runbook mit Windows PowerShell zu starten. Wenn Sie ein untergeordnetes Runbook von einem Cmdlet aus starten, wechselt das übergeordnete Runbook zur nächsten Zeile, sobald der Auftrag für das untergeordnete Runbook erstellt wurde. Wenn Sie eine Ausgabe aus dem Runbook erhalten möchten, müssen Sie mit Get-SMAJobOutput auf den Job zugreifen.
Der Auftrag eines mit einem Cmdlet gestarteten untergeordneten Runbooks wird in einem vom übergeordneten Runbook getrennten Auftrag ausgeführt. Dies führt zu mehr Aufträgen als beim Inline-Aufruf des Workflows, was den Overhead auf dem Worker-Server erhöht und die Nachverfolgung erschwert. Das übergeordnete Element kann jedoch mehrere untergeordnete Runbooks starten, ohne auf die Fertigstellung jedes einzelnen zu warten. Für diese Art der parallelen Ausführung, bei der untergeordnete Runbooks inline aufgerufen werden, muss das übergeordnete Runbook das Schlüsselwort parallelverwenden.
Parameter für ein mittels Cmdlet gestartetes untergeordnetes Runbook werden wie unter Runbook-Parameterbeschrieben als Hashtabelle bereitgestellt. Es können nur einfache Datentypen verwendet werden, obwohl Sie den Namen eines Anmeldeinformationsobjekts bereitstellen können, wie in Anmeldeinformationen beschrieben. Enthält das Runbook einen Parameter mit einem komplexen Datentyp, muss es inline aufgerufen werden.
Das folgende Beispiel startet ein untergeordnetes Runbook mit Parametern und wartet dann auf dessen Fertigstellung. Nach seiner Fertigstellung wird seine Ausgabe vom übergeordneten Runbook aus dem Job gesammelt.
$webServer = 'https://MyServer'
$port = 9090
$runbookName = "Test-Runbook"
$params = @{"VMName"="MyVM";"RepeatCount"=2;"Restart"=$true}
$job = Start-SmaRunbook -WebServiceEndpoint $webServer -Port $port -Name $runbookName -Parameters $params
$doLoop = $true
While ($doLoop) {
$job = Get-SmaJob -WebServiceEndpoint $webServer -Port $port -Id $job.Id
$status = $job.Status
$doLoop = (($status -ne "Completed") -and ($status -ne "Failed") -and ($status -ne "Suspended") -and ($status -ne "Stopped")
}
Get-SmaJobOutput -WebServiceEndpoint $webServer -Port $port -Id $job.Id -Stream Output
Vergleich der Methoden zum Aufrufen eines untergeordneten Runbook
Die folgende Tabelle enthält eine Zusammenfassung der Unterschiede zwischen den beiden Methoden zum Aufrufen eines untergeordneten Runbooks.
Inline | Cmdlet | |
---|---|---|
Job | Untergeordnete Runbooks werden im selben Auftrag ausgeführt wie das übergeordnete Runbook. | Für das untergeordnete Runbook wird ein separater Auftrag erstellt. |
Ausführung | Das übergeordnete Runbook wird erst nach Abschluss des untergeordneten Runbooks fortgesetzt. | Das übergeordnete Runbook wird unmittelbar nach dem Starten des untergeordneten Runbook fortgesetzt. |
Output | Ausgaben des untergeordneten Runbooks werden direkt an das übergeordnete Runbook zurückgegeben. | Das übergeordnete Runbook muss die Ausgabe des untergeordneten Runbook-Auftrags abrufen. |
Parameter | Werte für die Parameter des untergeordneten Runbooks werden separat angegeben, und es können beliebige Datentypen verwendet werden. | Die Werte für die untergeordneten Runbook-Parameter müssen in einer einzigen Hashtabelle kombiniert werden und können nur einfache, Array- und Objektdatentypen enthalten, die JSON-Serialisierung verwenden. |
Veröffentlichung | Das untergeordnete Runbook muss vor der Veröffentlichung des übergeordneten Runbooks veröffentlicht werden. | Das untergeordnete Runbook muss vor dem Start des übergeordneten Runbooks veröffentlicht werden. |
Nächste Schritte
- Erfahren Sie mehr über Automatisierungsrunbooks.