Untergeordnete Runbooks in Service Management Automation

Wichtig

Diese Version von Service Management Automation (SMA) hat das Supportende erreicht. Sie sollten ein Upgrade auf SMA 2019 durchführen.

Es ist eine bewährte Methode in 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 untergeordnete Runbooks zum Durchführen erforderlicher Funktionen auf. Zum Aufrufen eines untergeordneten Runbooks stehen zwei Methoden zur Auswahl, die sich erheblich unterscheiden. Um die beste Methode für Ihre verschiedenen Szenarien bestimmen zu können, sollten Sie sich daher zunächst mit diesen Unterschieden vertraut machen.

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 in derselben SMA-Umgebung stehen allen anderen zur Verwendung auf diese Weise zur Verfügung. 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 weniger Aufträgen und erleichtert die Nachverfolgung und Problembehandlung, da alle vom untergeordneten Runbook ausgelösten Ausnahmen sowie alle Streamausgaben, die dem übergeordneten Runbookauftrag zugeordnet sind, leichter zu beheben sind.

Wenn ein Runbook veröffentlicht wird, müssen alle von ihm aufgerufenen untergeordneten Runbooks bereits veröffentlicht sein. Dies liegt daran, dass Automation eine Zuordnung zu allen untergeordneten Runbooks erstellt, wenn ein Runbook kompiliert wird. Wenn dies nicht der Dert ist, scheint das übergeordnete Runbook ordnungsgemäß zu veröffentlichen. Beim Start wird jedoch eine Ausnahme generiert. In diesem Fall können Sie das übergeordnete Runbook erneut veröffentlichen, um korrekt auf die untergeordneten Runbooks zu verweisen. Sie müssen das übergeordnete Runbook nicht erneut veröffentlichen, wenn eines der untergeordneten Runbooks geändert wird, da die Zuordnung bereits erstellt wurde.

Die Parameter eines inline aufgerufenen untergeordneten Runbooks können einen beliebigen Datentyp aufweisen, z. B. komplexe Objekte sein, und es gibt keine JSON-Serialisierung wie beim Starten des Runbooks mit dem Verwaltungsportal oder dem Start-SmaRunbook -Cmdlet.

Runbooktypen

Ein Runbook kann nur ein anderes Runbook vom gleichen Typ wie ein untergeordnetes Runbook mithilfe der Inlineausführung verwenden. Dies bedeutet, dass ein PowerShell-Workflow-Runbook ein PowerShell-Runbook nicht als untergeordnetes Runbook mit Inlineausführung verwenden kann und ein PowerShell-Runbook kein PowerShell-Workflow-Runbook verwenden kann.

Wenn Sie ein untergeordnetes PowerShell Workflow-Runbook mithilfe der Inlineausführung aufrufen, verwenden Sie einfach den Namen des Runbooks. Wenn Sie ein untergeordnetes PowerShell-Runbook aufrufen, müssen Sie seinem Namen .\ voran stehen, 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 das gleiche Beispiel, in dem ein PowerShell-Skript-Runbook als untergeordnetes -Skript verwendet wird.

$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = .\Test-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true

Starten eines untergeordneten Runbooks mithilfe von Cmdlets

Sie können das Cmdlet Start-SMARunbook verwenden,um ein Runbook mit Windows PowerShell. Beim Starten eines untergeordneten Runbooks über ein Cmdlet geht das übergeordnete Runbook zur nächsten Zeile, sobald der Auftrag für das untergeordnete Runbook erstellt wurde. Soll eine Ausgabe aus dem Runbook abgerufen werden, müssen Sie mithilfe von Get-SMAJobOutputauf den Auftrag 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 das Aufrufen des Workflows inline, erhöht den Aufwand auf dem Workerserver und erschwert die Nachverfolgung. Das übergeordnete Runbook kann jedoch mehrere untergeordnete Runbooks starten, ohne auf den Abschluss der einzelnen Runbooks 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 untergeordnetes Runbook, das mit einem Cmdlet gestartet wurde, werden wie unter Runbookparameter beschrieben als Hashtabelle bereitgestellt. Es können nur einfache Datentypen verwendet werden, obwohl Sie den Namen des Anmeldeinformationsobjekts bereitstellen können, wie unter Credentialsbeschrieben. Enthält das Runbook einen Parameter mit einem komplexen Datentyp, muss es inline aufgerufen werden.

Im folgenden Beispiel wird ein untergeordnetes Runbook mit Parametern gestartet und dann gewartet, bis es abgeschlossen ist. Bei Abschluss wird seine Ausgabe vom übergeordneten Runbook aus dem Auftrag erfasst.

$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

Vergleichen von Methoden zum Aufrufen eines untergeordneten Runbooks

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 fährt unmittelbar nach dem Start des untergeordneten Runbooks fort.
Ausgabe Ausgaben des untergeordneten Runbooks werden direkt an das übergeordnete Runbook zurückgegeben. Das übergeordnete Runbook muss die Ausgabe aus dem Auftrag des untergeordneten Runbooks abrufen.
Parameter Werte für die Parameter des untergeordneten Runbooks werden separat angegeben, und es können beliebige Datentypen verwendet werden. Werte für die Parameter des untergeordneten Runbooks müssen in einer einzigen Hashtabelle kombiniert werden, und es können nur einfache, Array- und Objektdatentypen, die JSON-Serialisierung nutzen, verwendet werden.
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

Informationen zu Automation-Runbooks