Dela via


Underordnade runbooks i Service Management Automation

Viktigt

Den här versionen av Service Management Automation (SMA) har nått slutet av supporten. Vi rekommenderar att du uppgraderar till SMA 2022.

Det är bästa praxis i Service Management Automation (SMA) att skriva återanvändbara, modulära runbooks med en diskret funktion som kan användas av andra runbooks. En överordnad runbook anropar ofta en eller flera underordnade runbooks för att utföra de funktioner som krävs. Det finns två sätt att anropa en underordnad runbook och var och en har distinkta skillnader som du bör förstå så att du kan avgöra vilka som är bäst för dina olika scenarier.

Anropa en underordnad runbook med infogad körning

Om du vill aktivera en infogad runbook från en annan runbook, använder du runbook-namnet och anger värden för parametrarna på samma sätt som du skulle använda en aktivitet eller cmdlet. Alla runbooks i samma SMA-miljö är tillgängliga för alla andra som ska användas på det här sättet. Den överordnade runbooken väntar på att den underordnade runbooken ska slutföras innan du går till nästa rad. Eventuella utdata returneras direkt till den överordnade runbooken.

När du aktiverar en infogad runbook körs den i samma jobb som den överordnade runbooken. Jobbhistoriken kommer inte att visa den underordnade runbook som kördes. Eventuella undantag och strömmad utdata från den underordnade runbooken kommer att associeras med den överordnade runbooken. Detta resulterar i färre jobb och gör dem enklare att spåra och felsöka eftersom eventuella undantag som genereras av den underordnade runbooken och eventuella strömutdata som är associerade med det överordnade Runbook-jobbet.

När en runbook publiceras måste alla underordnade runbooks som anropas redan ha en publicerad version. Det beror på att Automation skapar en association med underordnade runbooks när en runbook kompileras. Om de inte är det verkar den överordnade runbooken publicera korrekt, men den genererar ett undantag när den startas. Om det händer kan du publicera om den överordnade runbooken för att få en korrekt referens till underordnade runbooks. Du behöver inte publicera om den överordnade runbooken om någon av de underordnade runbooks ändras eftersom associationen redan har skapats.

Parametrarna för en underordnad runbook med namnet infogad kan vara vilken datatyp som helst, inklusive komplexa objekt, och det finns ingen JSON-serialisering eftersom det finns när du startar runbooken med hjälp av hanteringsportalen eller med cmdleten Start-SmaRunbook .

Runbook-typer

En runbook kan bara använda en annan runbook av samma typ som en underordnad runbook med infogad körning. Det innebär att en PowerShell-arbetsflödes runbook inte kan använda en PowerShell-runbook som underordnad med hjälp av infogad körning och att en PowerShell-runbook inte kan använda en PowerShell Workflow-runbook.

När du anropar en underordnad Runbook för PowerShell Workflow med infogad körning använder du bara namnet på runbooken. När du anropar en underordnad PowerShell-runbook måste du föregå dess namn med .\ för att ange att skriptet finns i den lokala katalogen.

Exempel

I följande exempel aktiverar ett test en underordnad runbook som accepterar tre parametrar, ett komplext objekt, ett heltal och ett booleskt värde. Resultatet av den underordnade runbooken tilldelas till en variabel. I det här fallet är den underordnade runbooken en PowerShell Workflow-runbook.

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

Följande är samma exempel med hjälp av en PowerShell-skript-runbook som den underordnade.

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

Starta en underordnad runbook med hjälp av cmdletar

Du kan använda cmdleten Start-SMARunbookför att starta en runbook med Windows PowerShell. När du startar en underordnad runbook från en cmdlet, flyttas den överordnade runbooken till nästa rad när jobbet skapas för den underordnade runbooken. Om du behöver hämta utdata från runbooken måste du komma åt jobbet med hjälp av Get-SMAJobOutput.

Jobbet från en underordnad runbook som startades med en cmdlet kommer att köras i ett separat jobb från den överordnade runbooken. Detta resulterar i fler jobb än att anropa arbetsflödet infogat, öka omkostnaderna på arbetsservern och göra dem svårare att spåra. Den överordnade kan dock starta flera underordnade runbooks utan att vänta på att var och en ska slutföras. För samma typ av parallell körning som anropar underordnade runbooks infogade måste den överordnade runbooken använda det parallella nyckelordet.

Parametrar för en underordnad runbook som startats med en cmdlet tillhandahålls som en hashtable enligt beskrivningen i Runbook Parameters. Endast enkla datatyper kan användas, även om du kan ange namnet på en autentiseringstillgång enligt beskrivningen i Autentiseringsuppgifter. Om runbooken har en parameter med en komplex datatyp, måste den anropas infogad.

I följande exempel startas en underordnad runbook med parametrar och väntar sedan på att slutföras. När den är slutförd samlas utdata in från jobbet av den överordnade runbooken.

$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

Jämför metoder för att anropa en underordnad runbook

I följande tabell sammanfattas skillnaderna mellan de två metoderna för att anropa en runbook från en annan runbook.

Infogad Cmdlet
Jobb Underordnade runbooks körs i samma jobb som överordnade. Ett separat jobb skapas för den underordnade runbooken.
Körnings- Överordnad runbook väntar på att underordnad runbook ska slutföras innan du fortsätter. Överordnad runbook fortsätter omedelbart efter att underordnad runbook har startats.
Resultat Överordnad runbook kan hämta utdata direkt från underordnad runbook. Överordnad runbook måste hämta utdata från underordnat runbook-jobb.
Parametrar Värden för parametrar i underordnad runbook anges separat och kan använda alla datatyper. Värden för underordnade runbook-parametrar måste kombineras till en enda hashtabell och kan bara innehålla enkla datatyper, matriser och objektdatatyper som använder JSON-serialisering.
Publicera Underordnad runbook måste publiceras innan överordnad runbook publiceras. Underordnad runbook måste publiceras när som helst innan en överordnad runbook startas.

Nästa steg