Teilen über


Untergeordnete Runbooks in der Dienstverwaltungsautomatisierung

Es ist eine bewährte Methode in Service Management Automation (SMA), wiederverwendbare, modulare Runbooks mit einer separaten Funktion zu schreiben, die von anderen Runbooks verwendet werden kann. Ein übergeordnetes Runbook ruft häufig ein oder mehrere untergeordnete Runbooks auf, um die erforderlichen Funktionen auszuführen. Es gibt zwei Möglichkeiten, ein untergeordnetes Runbook aufzurufen, und jede hat unterschiedliche Unterschiede, die Sie verstehen sollten, damit Sie bestimmen können, welche für Ihre verschiedenen Szenarien am besten geeignet 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 in derselben SMA-Umgebung stehen allen anderen zur Verfügung, die auf diese Weise verwendet werden können. 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 ihnen das Nachverfolgen und Beheben von Problemen, da alle vom untergeordneten Runbook ausgelösten Ausnahmen und alle Datenstromausgaben, die dem übergeordneten Runbook-Auftrag zugeordnet sind, zugeordnet sind.

Wenn ein Runbook veröffentlicht wird, müssen alle von ihr aufgerufenen untergeordneten Runbooks bereits über eine veröffentlichte Version verfügen. Dies liegt daran, dass Automatisierung eine Zuordnung zu allen untergeordneten Runbooks erstellt, wenn ein Runbook kompiliert wird. Wenn dies nicht der Fehler ist, wird das übergeordnete Runbook anscheinend ordnungsgemäß veröffentlicht, generiert aber beim Starten eine Ausnahme. 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 untergeordneten Runbooks, das inline genannt wird, kann ein beliebiger Datentyp sein, einschließlich komplexer Objekte, und es gibt keine JSON-Serialisierung , da beim Starten des Runbook mithilfe des Verwaltungsportals oder mit dem Cmdlet Start-SmaRunbook vorhanden ist.

Runbooktypen

Ein Runbook kann nur ein anderes Runbook desselben Typs wie ein untergeordnetes Runbook mit inlineausführung verwenden. Dies bedeutet, dass ein PowerShell-Workflow-Runbook kein PowerShell-Runbook als untergeordnetes Element mit Inlineausführung verwenden kann, und ein PowerShell-Runbook kann kein PowerShell-Workflow-Runbook verwenden.

Wenn Sie ein untergeordnetes PowerShell-Workflow-Runbook mit Inlineausführung aufrufen, verwenden Sie einfach den Namen des Runbook. Wenn Sie ein untergeordnetes PowerShell-Runbook aufrufen, müssen Sie dem Namen " .\" vorangehen, 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

Im Folgenden sehen Sie das gleiche Beispiel mit einem PowerShell-Skript-Runbook wie das untergeordnete Element.

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

Starten eines untergeordneten Runbook mithilfe von Cmdlets

Sie können das Start-SMARunbook-Cmdlet verwenden, um ein Runbook mit Windows PowerShell zu starten. Wenn Sie ein untergeordnetes Runbook über ein Cmdlet starten, wechselt das übergeordnete Runbook zur nächsten Zeile, sobald der Auftrag für das untergeordnete Runbook erstellt wird. Wenn Sie eine Ausgabe aus dem Runbook abrufen müssen, müssen Sie mithilfe von Get-SMAJobOutput auf 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 und erhöht den Aufwand auf dem Arbeitsserver und macht sie schwieriger zu verfolgen. Das übergeordnete Element kann mehrere untergeordnete Runbooks starten, ohne auf jeden Abschluss 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 einer Anmeldeinformationsressource angeben können, wie unter "Anmeldeinformationen" beschrieben. 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 anschließend auf den Abschluss gewartet. Nach Abschluss wird die 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 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. 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 jederzeit veröffentlicht werden, bevor ein übergeordnetes Runbook gestartet wird.

Nächste Schritte