Starta en Runbook från en annan Runbook
Utgivet: mars 2016
Gäller för: Windows Azure Pack for Windows Server, System Center 2012 R2 Orchestrator
Det är ett metodtips i Service Management Automation att skriva återanvändningsbara, modulbaserade 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.
Aktivera en underordnad runbook med infogad körning
Starta en underordnad runbook med en cmdlet
Aktivera 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 Service Management Automation-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 innebär färre jobb och gör det enklare att spåra och felsöka, eftersom alla undantag från den underordnade runbooken och all strömmad utdata ä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 bygger en association med någon av underordnade runbooks när en runbook kompileras. Om detta inte händer kommer det verka som om den överordnade runbooken publicerar korrekt, men den kommer att generera 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 som anropas internt kan vara en datatyp som inkluderar komplexa objekt. Det finns inte någon JSON-serialisering som det finns när du startar runbooken med hanteringsportalen eller med cmdleten Start-SmaRunbook.
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.
$vm = Get-VM –Name "MyVM" –ComputerName "MyServer"
$output = Test-ChildRunbook –VM $vm –RepeatCount 2 –Restart $true
Starta en underordnad runbook med en cmdlet
Du kan använda cmdleten Start-SMARunbook till att starta en runbook enligt beskrivningen i To start a runbook with 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 någon utdata från runbooken, måste du få åtkomst till jobbet med 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 innebär fler jobb än de som aktiverar det infogade arbetsflödet, vilket ökar belastningen på Worker-servern och gör dem svårare att spåra. Den överordnade runbooken kan starta flera underordnade runbooks, utan att behöva vänta på att alla ska slutföras. För att få samma typ av parallell körning vid anrop av infogade underordnade runbooks, skulle den överordnade runbooken behöva använda parallellt nyckelord.
Parametrar för en underordnad runbook som startas med en cmdlet tillhandahålls som en hash-tabell enligt beskrivningen i Runbook Parameters. Endast enkla datatyper kan användas, även om du kan ange namnet på en autentiseringsuppgifttillgång enligt beskrivningen i Inloggningsuppgifter. 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örelse av 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örning |
Ö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. |
Utdata |
Ö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. |
Se även
To start a runbook with Windows PowerShell
Runbook Authoring [SMA]
Utöka Service Management Automation med Runbooks