Partager via


Runbooks enfants dans Service Management Automation

Important

Cette version de Service Management Automation (SMA) a atteint la fin du support. Nous vous recommandons de mettre à niveau vers SMA 2022.

Il est recommandé dans Service Management Automation (SMA) d’écrire des runbooks réutilisables et modulaires avec une fonction discrète qui peut être utilisée par d’autres runbooks. Un runbook parent appelle souvent un ou plusieurs runbooks enfants pour exécuter les fonctionnalités requises. Il existe deux façons d’appeler un runbook enfant, et chacune présente des différences distinctes que vous devez comprendre afin que vous puissiez déterminer lequel sera le mieux adapté à vos différents scénarios.

Appeler un Runbook enfant à l’aide de l’exécution incluse

Pour appeler un Runbook en ligne à partir d’un autre Runbook, vous utilisez le nom du Runbook et définissez des valeurs pour ses paramètres de la même façon qu’avec une activité ou une applet de commande. Tous les runbooks du même environnement SMA peuvent être utilisés par tous les autres de cette manière. Le Runbook parent attend la fin de l’exécution du Runbook enfant avant de passer à la ligne suivante, et toute sortie est retournée directement au parent.

Lorsque vous appelez un Runbook en ligne, il est exécuté dans la même tâche que le Runbook parent. L’historique des tâches du Runbook enfant n’indique pas qu’il a été exécuté. Toutes les exceptions et sorties de flux issues du Runbook enfant seront associées au parent. Cela entraîne moins de travaux et les rend plus faciles à suivre et à dépanner, car toutes les exceptions levées par le runbook enfant et les sorties de flux associées au travail de runbook parent.

Quand un Runbook est publié, les Runbooks enfants qu'il appelle doivent déjà disposer d'une version publiée. En effet, Automation crée une association avec les runbooks enfants quand un runbook est compilé. Si ce n’est pas le cas, le runbook parent semblera publier correctement, mais il générera une exception au démarrage. Dans ce cas, vous pouvez republier le Runbook parent pour référencer correctement les Runbooks enfants. Vous n’avez pas besoin de republier le runbook parent si l’un des runbooks enfants est modifié, car l’association a déjà été créée.

Les paramètres d’un runbook enfant appelé inline peuvent être n’importe quel type de données, y compris les objets complexes, et il n’y a pas de sérialisation JSON , car vous démarrez le runbook à l’aide du portail de gestion ou de l’applet de commande Start-SmaRunbook .

Types de runbook

Un runbook ne peut utiliser qu’un autre runbook du même type comme runbook enfant à l’aide de l’exécution en ligne. Cela signifie qu’un runbook de flux de travail PowerShell ne peut pas utiliser un runbook PowerShell en tant qu’enfant à l’aide de l’exécution inline, et qu’un runbook PowerShell ne peut pas utiliser un runbook de flux de travail PowerShell.

Lorsque vous appelez un runbook enfant PowerShell Workflow à l’aide d’une exécution en ligne, vous utilisez simplement le nom du runbook. Lorsque vous appelez un runbook enfant PowerShell, vous devez faire précéder son nom de .\ pour spécifier que le script se trouve dans le répertoire local.

Exemple

Dans l’exemple suivant, on appelle un Runbook enfant de test qui accepte trois paramètres : un objet complexe, un entier et une valeur booléenne. La sortie du Runbook enfant est affectée à une variable. Dans ce cas, le runbook enfant est un runbook de workflow PowerShell.

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

Voici le même exemple utilisant un runbookde script PowerShell en tant qu’enfant.

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

Démarrer un runbook enfant à l’aide de cmdlets

Vous pouvez utiliser la cmdlet Start-SmaRunbookpour démarrer un runbook avec Windows PowerShell. Quand vous démarrez un Runbook enfant à partir d'une applet de commande, le Runbook parent se déplace à la ligne suivante, dès que le travail est créé pour le Runbook enfant. Si vous devez récupérer la sortie du Runbook, vous devez accéder au travail via Get-SMAJobOutput.

La tâche issue d’un Runbook enfant démarré avec une applet de commande est exécutée dans une tâche distincte du Runbook parent. Cela entraîne plus de travaux que l’appel du flux de travail en ligne, ce qui augmente la surcharge sur le serveur worker et les rend plus difficiles à suivre. Le parent peut démarrer plusieurs runbooks enfants sans attendre que chacun se termine. Pour ce même type d’exécution en parallèle avec appel des runbooks enfants en ligne, le runbook parent doit utiliser le mot clé parallèle.

Les paramètres d’un runbook enfant démarré avec une cmdlet sont fournis sous forme de table de hachage, comme décrit dans Paramètres de runbook. Seuls les types de données simples peuvent être utilisés. Toutefois, vous pouvez fournir le nom d'une ressource d'informations d'identification, comme indiqué dans Credentials. Si le Runbook possède un paramètre avec un type de données complexe, il doit être appelé en ligne.

L'exemple suivant démarre un Runbook enfant avec des paramètres, puis attend qu'il se termine. Une fois terminé, sa sortie est collectée à partir du travail par le Runbook parent.

$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

Comparaison des méthodes d'appel d'un runbook enfant

Le tableau suivant résume les différences entre les deux méthodes applicables pour appeler un Runbook à partir d’un autre Runbook.

En ligne Applet de commande
Travail Les Runbooks enfants s’exécutent dans la même tâche que le parent. Une tâche distincte est créée pour le Runbook enfant.
Exécution Le Runbook parent attend la fin de l’exécution du Runbook enfant avant de se poursuivre. Le Runbook parent se poursuit immédiatement après le démarrage du Runbook enfant.
Sortie Le Runbook parent peut obtenir directement la sortie du Runbook enfant. Le Runbook parent doit récupérer la sortie du travail du Runbook enfant.
Paramètres Les valeurs des paramètres du Runbook enfant sont spécifiées séparément et peuvent utiliser n’importe quel type de données. Les valeurs des paramètres de runbook enfants doivent être combinées en une seule table de hachage et peuvent uniquement inclure des types de données simples, de tableau et d’objet qui utilisent la sérialisation JSON.
Publication Le Runbook enfant doit être publié avant la publication du Runbook parent. Le runbook enfant doit être publié à tout moment avant le démarrage d’un runbook parent.

Étapes suivantes