Onderliggende runbooks in Service Management Automation
Belangrijk
Deze versie van Service Management Automation (SMA) heeft het einde van de ondersteuning bereikt. U wordt aangeraden een upgrade uit te voeren naar SMA 2022.
Het is een best practice in Service Management Automation (SMA) om herbruikbare, modulaire runbooks te schrijven met een discrete functie die door andere runbooks kan worden gebruikt. Een bovenliggend runbook roept vaak een of meer onderliggende runbooks aan om de vereiste functionaliteit uit te voeren. Er zijn twee manieren om een onderliggend runbook aan te roepen. Elk runbook heeft verschillende verschillen die u moet begrijpen, zodat u kunt bepalen wat het beste is voor uw verschillende scenario's.
Een onderliggend runbook aanroepen met behulp van inlineuitvoering
Als u een runbook inline vanuit een ander runbook wilt aanroepen, gebruikt u de naam van het runbook en geeft u waarden op voor de parameters van het runbook, precies zoals wanneer u een activiteit of cmdlet gebruikt. Alle runbooks in dezelfde SMA-omgeving zijn beschikbaar voor alle anderen om op deze manier te worden gebruikt. Het bovenliggende runbook wacht tot het onderliggende runbook gereed is voordat het naar de volgende regel gaat en eventuele uitvoer wordt rechtstreeks aan het bovenliggende runbook geretourneerd.
Als u een runbook inline aanroept, wordt dit uitgevoerd in dezelfde taak als het bovenliggende runbook. In de taakgeschiedenis van het onderliggende runbook wordt geen vermelding van het uitvoeren van dit runbook opgenomen. Eventuele uitzonderingen en eventuele stroomuitvoer van het onderliggende runbook worden gekoppeld aan het bovenliggende runbook. Dit resulteert in minder taken en maakt het gemakkelijker om deze bij te houden en op te lossen, omdat eventuele uitzonderingen worden veroorzaakt door het onderliggende runbook en eventuele stroomuitvoer die zijn gekoppeld aan de bovenliggende runbooktaak.
Wanneer een runbook wordt gepubliceerd, moeten alle onderliggende runbooks die daardoor worden aangeroepen, al een gepubliceerde versie hebben. Dit komt doordat Automation een koppeling maakt met alle onderliggende runbooks wanneer een runbook wordt gecompileerd. Als dat niet het geval is, lijkt het bovenliggende runbook correct te worden gepubliceerd, maar wordt er een uitzondering gegenereerd wanneer het wordt gestart. Als dit gebeurt, kunt u het bovenliggende runbook opnieuw publiceren zodat er correct wordt verwezen naar de onderliggende runbooks. U hoeft het bovenliggende runbook niet opnieuw te publiceren als een van de onderliggende runbooks is gewijzigd omdat de koppeling al is gemaakt.
De parameters van een onderliggend runbook met de naam inline kunnen elk gegevenstype zijn, inclusief complexe objecten, en er is geen JSON-serialisatie zoals wanneer u het runbook start met behulp van de beheerportal of met de cmdlet Start-SmaRunbook .
Runbooktypen
Een runbook kan alleen een ander runbook van hetzelfde type gebruiken als een onderliggend runbook met behulp van inline-uitvoering. Dit betekent dat een PowerShell Workflow-runbook geen PowerShell-runbook als onderliggend runbook kan gebruiken met inline-uitvoering en dat een PowerShell-runbook geen PowerShell Workflow-runbook kan gebruiken.
Wanneer u een onderliggend runbook van PowerShell Workflow aanroept met behulp van inline-uitvoering, gebruikt u alleen de naam van het runbook. Wanneer u een onderliggend PowerShell-runbook aanroept, moet u de naam ervan voorafgaan door .\ om op te geven dat het script zich in de lokale map bevindt.
Voorbeeld
In het volgende voorbeeld wordt een onderliggend testrunbook aangeroepen dat drie parameters, een complex object, een geheel getal en een Boolean-waarde accepteert. De uitvoer van het onderliggende runbook is toegewezen aan een variabele. In dit geval is het onderliggende runbook een PowerShell Workflow-runbook.
$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = Test-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true
Hieronder volgt hetzelfde voorbeeld met een PowerShell-scriptrunbook als het onderliggende voorbeeld.
$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = .\Test-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true
Een onderliggend runbook starten met cmdlets
U kunt de cmdlet Start-SMARunbook gebruiken om een runbook te starten met Windows PowerShell. Wanneer u een onderliggend runbook vanuit een cmdlet start, gaat het bovenliggende runbook naar de volgende regel zodra de taak voor het onderliggende runbook is gemaakt. Als u uitvoer van het runbook wilt ophalen, moet u toegang krijgen tot de taak met behulp van Get-SMAJobOutput.
De taak van een onderliggend runbook dat is gestart met een cmdlet, wordt afzonderlijk van het bovenliggende runbook uitgevoerd. Dit resulteert in meer taken dan het inline aanroepen van de werkstroom, waardoor de overhead op de werkserver toeneemt en ze moeilijker te volgen zijn. Het bovenliggende item kan echter meerdere onderliggende runbooks starten zonder te wachten tot elk runbooks is voltooid. Voor hetzelfde soort parallelle uitvoering die de onderliggende runbooks inline aanroept, moet het bovenliggende runbook het parallelle trefwoord gebruiken.
Parameters voor een onderliggend runbook dat is gestart met een cmdlet, worden opgegeven als een hashtabel, zoals beschreven in Runbookparameters. Alleen eenvoudige gegevenstypen kunnen worden gebruikt, hoewel u de naam van een referentieasset kunt opgeven, zoals beschreven in Referenties. Als het runbook een parameter met een complex gegevenstype heeft, moet dit inline worden aangeroepen.
In het volgende voorbeeld wordt een onderliggend runbook met parameters gestart en wordt vervolgens gewacht tot het is voltooid. Zodra het is voltooid, wordt de uitvoer van de taak door het bovenliggende runbook verzameld.
$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
Methoden vergelijken voor het aanroepen van een onderliggend runbook
De volgende tabel geeft een overzicht van de verschillen tussen de twee methoden voor het aanroepen van een runbook uit een ander runbook.
Inline | Cmdlet | |
---|---|---|
Taak | Onderliggende runbooks worden uitgevoerd in dezelfde taak als het bovenliggende runbook. | Er wordt een afzonderlijke taak gemaakt voor het onderliggende runbook. |
Uitvoering | Bovenliggend runbook wacht tot het onderliggende runbook is voltooid voordat het verdergaat. | Bovenliggend runbook gaat direct verder nadat onderliggend runbook is gestart. |
Uitvoer | Bovenliggend runbook kan uitvoer rechtstreeks uit onderliggend runbook verkrijgen. | Bovenliggend runbook moet uitvoer ophalen uit taak van onderliggend runbook. |
Parameters | Waarden voor de parameters van onderliggend runbook worden afzonderlijk opgegeven en kunnen elk gegevenstype hebben. | Waarden voor de onderliggende runbookparameters moeten worden gecombineerd tot één hashtabel en kunnen alleen eenvoudige, matrix- en objectgegevenstypen bevatten die gebruikmaken van JSON-serialisatie. |
Publiceren | Onderliggend runbook moet zijn gepubliceerd voordat bovenliggend runbook wordt gepubliceerd. | Onderliggend runbook moet op elk gewenst moment worden gepubliceerd voordat een bovenliggend runbook wordt gestart. |
Volgende stappen
- Meer informatie over automation-runbooks.