Delen via


Een runbook starten vanuit een ander runbook

 

Van toepassing op: Windows Azure Pack for Windows Server, System Center 2012 R2 Orchestrator

Het wordt aanbevolen in Automatisering van servicebeheer om herbruikbare, modulaire runbooks te beschrijven met een aparte functie die kan worden gebruikt door andere runbooks. Een bovenliggend runbook roept vaak een of meer onderliggende runbooks aan om vereiste functionaliteit uit te voeren. Er zijn twee manieren om een onderliggend runbook aan te roepen en elke manier kent duidelijke verschillen die u moet begrijpen zodat u kunt bepalen wat de beste manier is voor uw verschillende scenario's.

  • Aanroepen van een onderliggend runbook met inline-uitvoering

  • Een onderliggend runbook starten met behulp van een cmdlet

Aanroepen van een onderliggend runbook met inline-uitvoering

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 Automatisering van servicebeheer-omgeving zijn beschikbaar voor alle andere runbooks die op deze manier moeten 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 zorgt ervoor dat ze gemakkelijker zijn te volgen en dat problemen eenvoudiger zijn op te lossen omdat eventuele uitzonderingen die worden veroorzaakt door het onderliggende runbook en de stroomuitvoer daarvan, zijn gekoppeld aan de taak van het bovenliggende runbook.

Wanneer een runbook wordt gepubliceerd, moeten alle onderliggende runbooks die daardoor worden aangeroepen, al een gepubliceerde versie hebben. Dit komt omdat Automatisering een koppeling met onderliggende runbooks creëert wanneer een runbook wordt gecompileerd. Als ze die versie niet hebben, lijkt het of het bovenliggende runbook correct wordt gepubliceerd, maar wordt er bij het starten een uitzondering gegenereerd. 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 dan al is gemaakt.

De parameters van een onderliggend runbook dat inline wordt aangeroepen, kunnen uit elk gegevenstype bestaan, met inbegrip van complexe objecten. Er vindt geen JSON-serialisatie plaats zoals wanneer u het runbook start met behulp van de beheerportal of met de cmdlet Start-SmaRunbook.

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.

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

Een onderliggend runbook starten met behulp van een cmdlet

U kunt de cmdlet Start-SMARunbook gebruiken om een runbook te starten zoals beschreven in To start a runbook with 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 eventuele uitvoer van het runbook wilt ophalen, moet u de taak openen 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 bij het inline aanroepen van de werkstroom, waardoor overhead op de Worker-server wordt vergroot en ze moeilijker te volgen zijn. Het bovenliggende runbook kan meerdere onderliggende runbooks starten, maar wacht niet tot elk daarvan is voltooid. Als bij dezelfde soort parallelle uitvoering de onderliggende runbooks inline moeten worden aangeroepen, moet het bovenliggende runbook het parallelle sleutelwoord gebruiken.

Parameters voor een onderliggend runbook dat is gestart met een cmdlet, worden opgegeven als hashtabel, zoals beschreven in Runbook Parameters. Er kunnen alleen eenvoudige gegevenstypen worden gebruikt, hoewel u de naam van een referentie-element 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

Vergelijking van methoden 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 parameters van onderliggend runbook moeten worden samengevoegd in één hashtabel en kunnen alleen bestaan uit de gegevenstypen eenvoudig, matrix en object, die gebruikmaken van JSON-serialisatie.

Publiceren

Onderliggend runbook moet zijn gepubliceerd voordat bovenliggend runbook wordt gepubliceerd.

Onderliggend runbook moet zijn gepubliceerd voordat bovenliggend runbook wordt gestart.