Condividi tramite


Runbook figlio in Service Management Automation

È consigliabile usare Service Management Automation (SMA) per scrivere runbook riutilizzabili e modulari con una funzione discreta che può essere usata da altri runbook. Un runbook padre chiamerà spesso uno o più runbook figlio per eseguire le funzionalità necessarie. Esistono due modi per chiamare un runbook figlio e ognuno presenta differenze distinte da comprendere in modo da poter determinare quale sarà la soluzione migliore per i diversi scenari.

Chiamare un runbook figlio usando l'esecuzione inline

Per richiamare un runbook inline da un altro runbook, utilizzare il nome del runbook e fornire valori per i relativi parametri, esattamente come si farebbe per un'attività o un cmdlet. Tutti i runbook nello stesso ambiente SMA sono disponibili per tutti gli altri utenti da usare in questo modo. Il runbook padre attenderà il completamento del runbook figlio prima di passare alla riga successiva e gli output vengono restituiti direttamente all'elemento padre.

Quando si richiama un runbook inline, esso viene eseguito nello stesso processo del runbook padre. Nella cronologia del processo non verrà indicato il runbook figlio eseguito. Eventuali eccezioni e flussi di output dal runbook figlio verranno associati all'elemento padre. Questo comporta un minor numero di processi e li rende più facili da tenere traccia e risolvere i problemi, poiché eventuali eccezioni generate dal runbook figlio e da eventuali output di flusso associati al processo del runbook padre.

Quando viene pubblicato un Runbook, tutti i Runbook figlio chiamati devono avere già una versione pubblicata, Ciò è dovuto al fatto che Automazione compila un'associazione con tutti i runbook figlio quando viene compilato un runbook. In caso contrario, il runbook padre apparirà correttamente, ma genererà un'eccezione all'avvio. In questo caso, è possibile ripubblicare il runbook padre per fare riferimento in modo corretto ai runbook figlio. Non è necessario ripubblicare il runbook padre se uno dei runbook figlio viene modificato perché l'associazione sarà già stata creata.

I parametri di un runbook figlio denominato inline possono essere di qualsiasi tipo di dati, inclusi gli oggetti complessi, e non esiste alcuna serializzazione JSON perché è presente quando si avvia il runbook usando il portale di gestione o con il cmdlet Start-SmaRunbook .

Tipi di runbook

Un runbook può usare solo un altro runbook dello stesso tipo di un runbook figlio usando l'esecuzione inline. Ciò significa che un runbook del flusso di lavoro PowerShell non può usare un runbook di PowerShell come figlio usando l'esecuzione inline e un runbook di PowerShell non può usare un runbook del flusso di lavoro PowerShell.

Quando si chiama un runbook figlio del flusso di lavoro PowerShell usando l'esecuzione inline, è sufficiente usare il nome del runbook. Quando si chiama un runbook figlio di PowerShell, è necessario precederne il nome con .\ per specificare che lo script si trova nella directory locale.

Esempio

Nell'esempio seguente viene richiamato un runbook figlio di test che accetta tre parametri, un oggetto complesso, un numero intero e un valore booleano. L'output del runbook figlio viene assegnato a una variabile. In questo caso, il runbook figlio è un runbook del flusso di lavoro PowerShell.

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

Di seguito è riportato lo stesso esempio che usa un runbook di script di PowerShell come figlio.

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

Avviare un runbook figlio usando i cmdlet

È possibile usare il cmdlet Start-SMARunbook per avviare un runbook con Windows PowerShell. Quando si avvia un Runbook figlio da un cmdlet, il Runbook padre passerà alla riga successiva non appena viene creato il processo per il Runbook figlio. Per recuperare un output dal Runbook, è necessario accedere al processo con Get-SMAJobOutput.

Verrà eseguito il processo da un runbook figlio avviato con un cmdlet in un processo separato dal runbook padre. Ciò comporta più processi che richiamare il flusso di lavoro inline, aumentando il sovraccarico sul server di lavoro e rendendo più difficile tenere traccia. L'elemento padre può avviare più runbook figlio senza attendere il completamento di ogni runbook. Per questa stessa tipologia di esecuzione parallela che chiama l’inline del runbook figlio, il runbook padre dovrà usare la parola chiave parallela.

I parametri per un runbook figlio avviato con un cmdlet vengono forniti come una tabella hash, come descritto in Parametri di Runbook. È possibile usare solo tipi di dati semplici, sebbene sia possibile fornire il nome di una risorsa per le credenziali come descritto in Credentials. Se il runbook dispone di un parametro con un tipo di dati complessi, deve essere chiamato inline.

L'esempio seguente avvia un Runbook figlio con parametri e ne attende quindi il completamento. Al termine, il relativo output viene raccolto dal processo dal Runbook padre.

$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

Confrontare i metodi per chiamare un runbook figlio

Nella tabella seguente vengono riepilogate le differenze tra i due metodi per chiamare un runbook da un altro runbook.

Incorporato Cmdlet
Mansione I runbook figlio vengono eseguiti nello stesso processo dell’elemento padre. Viene creato un processo separato per il runbook figlio.
Esecuzione Il runbook padre attende il completamento del runbook figlio prima di continuare. Il Runbook padre continua subito dopo l'avvio del Runbook figlio.
Output Il runbook padre può ottenere output direttamente dal runbook figlio. Il Runbook padre deve recuperare l'output dal processo del Runbook figlio.
Parametri I valori per i parametri di runbook figlio vengono specificati separatamente e possono utilizzare qualsiasi tipo di dati. I valori per i parametri del runbook figlio devono essere combinati in una singola tabella hash e possono includere solo tipi di dati semplici, di matrice e di oggetti che usano la serializzazione JSON.
Pubblicazione Il runbook figlio deve essere pubblicato prima della pubblicazione del runbook padre. Il runbook figlio deve essere pubblicato in qualsiasi momento prima dell'avvio di un runbook padre.

Passaggi successivi

  • Informazioni sui runbook di automazione.