Поделиться через


Дочерние модули Runbook в службе автоматизации управления службами

Рекомендуется создавать повторно используемые модульные модули Runbook с дискретной функцией, которая может использоваться другими модулями Runbook. Родительский модуль Runbook часто вызывает один или несколько дочерних модулей Runbook для выполнения необходимых функций. Существует два способа вызова дочернего модуля Runbook, и каждый из них имеет различные отличия, которые следует понимать, чтобы определить, какой из них лучше всего подходит для различных сценариев.

Вызов дочернего модуля runbook с использованием встроенного выполнения

Чтобы вызвать Runbook изнутри другого Runbook, используйте имя Runbook и укажите значения его параметров точно так же, как при использовании действия или командлета. Все модули Runbook в одной среде SMA доступны всем другим пользователям, которые будут использоваться таким образом. Родительский Runbook ожидает завершения работы дочернего Runbook, прежде чем перейти к следующей строке, и любые выходные данные возвращаются непосредственно в родительский Runbook.

При встроенном вызове дочерний Runbook выполняется в той же задаче, что и родительский Runbook. В журнале заданий дочернего Runbook не будет записей о его выполнении. Любые исключения и любой потоковый вывод дочернего Runbook будут связаны с родительским Runbook. Это приводит к меньшему числу заданий и упрощает их отслеживание и устранение неполадок, так как все исключения, создаваемые дочерним модуром Runbook, и все выходные данные потока, связанные с родительским заданием Runbook.

При публикации модуля Runbook все дочерние модули Runbook, которые он вызывает, должны уже иметь опубликованную версию. Это связано с тем, что служба автоматизации создает связь с любыми дочерними модулями Runbook при компиляции модуля Runbook. Если они не так, родительский модуль Runbook будет отображаться правильно, но при запуске будет создано исключение. В этом случае можно повторно опубликовать родительский Runbook, чтобы исправить ссылки на дочерние Runbook. Не нужно повторно публиковать родительский модуль Runbook, если какие-либо дочерние модули Runbook изменены, так как связь уже создана.

Параметры дочернего модуля Runbook, вызываемого inline, могут быть любым типом данных, включая сложные объекты, и сериализация JSON отсутствует при запуске модуля Runbook с помощью портала управления или командлета Start-SmaRunbook .

Типы Runbook

Модуль Runbook может использовать только другой модуль Runbook того же типа , что и дочерний модуль Runbook, используя встроенное выполнение. Это означает, что модуль Runbook рабочего процесса PowerShell не может использовать модуль Runbook PowerShell в качестве дочернего модуля с помощью встроенного выполнения, а модуль Runbook PowerShell не может использовать модуль Runbook рабочего процесса PowerShell.

При вызове дочернего модуля Runbook рабочего процесса PowerShell с помощью встроенного выполнения вы просто используете имя модуля Runbook. При вызове дочернего модуля Runbook PowerShell необходимо предшествуть его имени с .\ , чтобы указать, что скрипт находится в локальном каталоге.

Пример

В следующем примере вызывается тестовый дочерний Runbook, который принимает три параметра: сложный объект, целое число и логическое значение. Выходные данные дочернего Runbook присваиваются переменной. В этом случае дочерний модуль runbook является модулем runbook рабочего процесса PowerShell.

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

Ниже приведен тот же пример использования модуля Runbook скрипта PowerShell, что и дочерний модуль.

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

Запуск дочернего модуля Runbook с помощью командлетов

Командлет Start-SMARunbook можно использовать для запуска модуля Runbook с помощью Windows PowerShell. При запуске дочернего модуля Runbook из командлета родительский модуль Runbook перейдет на следующую строку сразу после создания задания для дочернего модуля Runbook. Если из модуля Runbook необходимо вернуть выходные данные, нужно получить доступ к заданию с помощью Get SMAJobOutput.

Задание дочернего Runbook, запущенного с помощью командлета, будет выполняться отдельно от задания родительского Runbook. Это приводит к увеличению числа заданий, чем вызов встроенного рабочего процесса, увеличению затрат на рабочем сервере и их более сложному отслеживанию. Родитель может запускать несколько дочерних модулей Runbook, хотя и не ожидая завершения каждого из них. Для такого параллельного выполнения дочерних Runbook с помощью встроенного вызова в родительском Runbook потребуется использовать ключевое слово parallel.

Параметры дочернего Runbook, запускаемого с помощью командлета, предоставляются в виде хэш-таблицы, как описано в статье Параметры Runbook. Несмотря на то, что можно указать имя ресурса учетных данных, как описано в Credentials, только простые типы данных доступны для использования. Если у Runbook есть параметр со сложным типом данных, то для него необходимо использовать встроенный вызов.

В следующем примере запускается дочерний модуль Runbook с параметрами и ожидается его завершение. После завершения родительский модуль Runbook собирает его выходные данные из задания.

$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

Сравнение методов вызова дочернего модуля Runbook

В следующей таблице перечислены различия между двумя методами вызова Runbook из другого Runbook.

Встроенный Командлет
Задание Дочерние Runbook выполняются в том же задании, что и родительский. Для дочернего Runbook создается отдельное задание.
Выполнение Родительский Runbook ожидает завершения дочернего Runbook, прежде чем продолжить выполнение. Родительский модуль Runbook продолжает выполнение сразу после запуска дочернего модуля Runbook.
Выходные данные Родительский Runbook может получить выходные данные непосредственно из дочернего Runbook. Родительский модуль Runbook должен вернуть выходные данные из задания дочернего модуля Runbook.
Параметры Значения параметров дочернего Runbook указываются отдельно и могут иметь любой тип данных. Значения дочерних параметров runbook должны объединяться в одну хэш-таблицы и могут включать только простые, массивные и объектные типы данных, использующие сериализацию JSON.
Публикация Перед публикацией родительского Runbook должен быть опубликован дочерний Runbook. Дочерний модуль Runbook должен быть опубликован в любое время до запуска родительского модуля Runbook.

Следующие шаги

  • Узнайте о модулях Runbook службы автоматизации.