Underordnade runbooks i Service Management Automation
Viktigt
Den här versionen 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 den funktionalitet som krävs. Det finns två sätt att anropa en underordnad runbook på. Var och en har tydliga skillnader som du bör känna till, så att du kan fastställa vilket som är bäst för dina olika scenarier.
Anropa en underordnad runbook med hjälp av infogade körningar
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 kan 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 utspelas 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 alla underordnade runbooks när en runbook kompileras. Om de inte är det verkar den överordnade runbooken publicera korrekt, men 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 göra en ny publicering av den överordnade runbooken om någon av underordnade runbooks ändras eftersom associationen redan kommer att ha skapats.
Parametrarna för en underordnad runbook med namnet infogade 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 Hanteringsportal eller med cmdleten Start-SmaRunbook .
Runbook-typer
En runbook kan bara använda en annan runbook av samma typ som en underordnad runbook med hjälp av infogade körningar. Det innebär att en PowerShell Workflow-runbook inte kan använda en PowerShell-runbook som underordnad med hjälp av infogade körningar, och en PowerShell-runbook kan inte använda en PowerShell Workflow-runbook.
När du anropar en underordnad Runbook för PowerShell Workflow med hjälp av infogade körningar 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 en PowerShell-skript-runbook som underordnad.
$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 cmdlets
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 anrop till arbetsflödet infogade, vilket ökar omkostnaderna på arbetsservern och gör 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 hash-tabell enligt beskrivningen i Runbook-parametrar. Endast enkla datatyper kan användas, men 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öra 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 i en enda hash-tabell och får endast innehålla enkla, matris- 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 överordnad runbook startas. |
Nästa steg
Läs mer om Automation Runbooks