Управление модулями runbook в службе автоматизации Azure

Чтобы добавить последовательность runbook в службу автоматизации Azure, можно создать новую последовательность или импортировать уже имеющуюся из файла или из коллекции runbook. В этой статье содержатся сведения об управлении модулями Runbook и рекомендуемыми шаблонами и рекомендациями по проектированию модуля Runbook. Информацию о получении доступа к последовательностям runbook и модулям сообществ см. в статье о коллекциях runbook и модулей для службы автоматизации Azure.

Создать Runbook

Создайте модуль Runbook в служба автоматизации Azure с помощью портал Azure или PowerShell. После создания последовательности runbook ее можно изменить, используя информацию в следующих документах.

Создание модуля Runbook на портале Azure

  1. Войдите на портал Azure.
  2. Найдите и выберите раздел Учетные записи службы автоматизации.
  3. На странице Учетные записи автоматизации выберите в списке нужную учетную запись службы автоматизации.
  4. В учетной записи службы автоматизации выберите Модули Runbook в разделе Автоматизация процессов, чтобы открыть список модулей runbook.
  5. Щелкните Создать Runbook.
    1. Присвойте новому модулю runbook имя.
    2. В раскрывающемся списке типа Runbook. Выберите тип. Имя runbook должно начинаться с буквы и может содержать буквы, цифры, символы подчеркивания и дефисы
    3. Выбор версии среды выполнения
    4. Введите применимое описание
  6. Щелкните Создать, чтобы создать runbook.

Создание модуля Runbook с помощью PowerShell

Используйте командлет New-AzAutomationRunbook, чтобы создать пустую последовательность runbook. Используйте параметр Type, чтобы задать один из четырех типов Runbook, определенных для New-AzAutomationRunbook.

В приведенном ниже примере показано, как создать пустую последовательность runbook.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'NewRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
}
New-AzAutomationRunbook @params

Импорт модуля Runbook

Вы можете импортировать скрипт PowerShell или скрипт рабочего процесса PowerShell (PS1), графическую последовательность runbook (GRAPHRUNBOOK), скрипт Python 2 или Python 3 (PY), чтобы создать собственный runbook. При этом необходимо указать тип модуля runbook, который создается в процессе импорта, с учетом следующих рекомендаций.

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

  • В последовательность runbook рабочего процесса PowerShell можно импортировать только файл PS1, содержащий рабочий процесс PowerShell. Если файл содержит несколько рабочих процессов PowerShell, импорт завершится ошибкой. Каждый рабочий процесс необходимо сохранить в отдельный файл и импортировать отдельно.

  • Не импортируйте файл PS1, содержащий рабочий процесс PowerShell, в последовательность runbook PowerShell, так как обработчик скриптов PowerShell не сможет его распознать.

  • В новую графическую последовательность runbook следует импортировать только файл GRAPHRUNBOOK.

Импорт последовательности runbook с портала Azure

Для импорта файла сценария в службу автоматизации Azure можно использовать описанную ниже процедуру.

Примечание.

С помощью портала PS1-файл можно импортировать только в последовательность runbook рабочего процесса PowerShell.

  1. На портале Azure найдите и выберите раздел Учетные записи службы автоматизации.
  2. На странице Учетные записи автоматизации выберите в списке нужную учетную запись службы автоматизации.
  3. В учетной записи службы автоматизации выберите Модули Runbook в разделе Автоматизация процессов, чтобы открыть список модулей runbook.
  4. Щелкните Импортировать модуль Runbook. Вы можете выбрать один из следующих параметров:
    1. Найдите файл — выбирает файл на локальном компьютере.
    2. Перейдите из коллекции . Вы можете просмотреть и выбрать существующий модуль Runbook из коллекции.
  5. Выберите файл .
  6. Если поле Имя активно, можно изменить имя runbook. Имя должно начинаться с буквы и может содержать буквы, цифры, символы подчеркивания и дефисы.
  7. Тип Runbook автоматически заполняется, но его можно изменить после принятия применимых ограничений.
  8. Версия среды выполнения автоматически заполняется или выбирает версию из раскрывающегося списка.
  9. Нажмите кнопку Импорт. Новый модуль runbook появится в списке модулей runbook для учетной записи службы автоматизации.
  10. Следует опубликовать модуль runbook, прежде чем вы сможете его запустить.

Примечание.

После импорта графической последовательности runbook ее можно преобразовать в другой тип. Однако графическую последовательность runbook нельзя преобразовать в текстовую последовательность runbook.

Импорт модуля Runbook с помощью PowerShell

Чтобы импортировать файл скрипта как черновик runbook, воспользуйтесь командлетом Import-AzAutomationRunbook. Если runbook уже существует, импорт завершится ошибкой. Чтобы этого не произошло, используйте командлет с параметром Force.

В приведенных ниже примерах показано, как импортировать файл сценария в последовательность runbook.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'Sample_TestRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
    Path                  = 'C:\Runbooks\Sample_TestRunbook.ps1'
}
Import-AzAutomationRunbook @params

Работа с ресурсами

Если runbook создает ресурсы, перед их созданием скрипт должен проверить их наличие. Ниже приведен простой пример.

$vmName = 'WindowsVM1'
$rgName = 'MyResourceGroup'
$myCred = Get-AutomationPSCredential 'MyCredential'

$vmExists = Get-AzResource -Name $vmName -ResourceGroupName $rgName
if (-not $vmExists) {
    Write-Output "VM $vmName does not exist, creating"
    New-AzVM -Name $vmName -ResourceGroupName $rgName -Credential $myCred
} else {
    Write-Output "VM $vmName already exists, skipping"
}

Получение сведений из журнала действий

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

$rgName = 'MyResourceGroup'
$accountName = 'MyAutomationAccount'
$runbookName = 'MyRunbook'
$startTime = (Get-Date).AddDays(-1)

$params = @{
    ResourceGroupName = $rgName
    StartTime         = $startTime
}
$JobActivityLogs = (Get-AzLog @params).Where( { $_.Authorization.Action -eq 'Microsoft.Automation/automationAccounts/jobs/write' })

$JobInfo = @{}
foreach ($log in $JobActivityLogs) {
    # Get job resource
    $JobResource = Get-AzResource -ResourceId $log.ResourceId

    if ($null -eq $JobInfo[$log.SubmissionTimestamp] -and $JobResource.Properties.Runbook.Name -eq $runbookName) {
        # Get runbook
        $jobParams = @{
            ResourceGroupName     = $rgName
            AutomationAccountName = $accountName
            Id                    = $JobResource.Properties.JobId
        }
        $Runbook = Get-AzAutomationJob @jobParams | Where-Object RunbookName -EQ $runbookName

        # Add job information to hashtable
        $JobInfo.Add($log.SubmissionTimestamp, @($Runbook.RunbookName, $Log.Caller, $JobResource.Properties.jobId))
    }
}
$JobInfo.GetEnumerator() | Sort-Object Key -Descending | Select-Object -First 1

Отслеживание хода выполнения

Рекомендуется создавать последовательности runbook с модульной структурой, используя удобную для повторного использования и перезапуска логику. Отслеживание хода выполнения в последовательности runbook гарантирует правильность выполнения ее логики при возникновении проблем.

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

Предотвращение выполнения одновременных заданий

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

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity 
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context 
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

# Check for already running or new runbooks 
$runbookName = "runbookName" 
$resourceGroupName = "resourceGroupName" 
$automationAccountName = "automationAccountName"

$jobs = Get-AzAutomationJob -ResourceGroupName $resourceGroupName -AutomationAccountName $automationAccountName -RunbookName $runbookName -DefaultProfile $AzureContext

# Ranking all the active jobs
$activeJobs = $jobs | where {$_.status -eq 'Running' -or $_.status -eq 'Queued' -or $_.status -eq 'New' -or $_.status -eq 'Activating' -or $_.status -eq 'Resuming'} | Sort-Object -Property CreationTime 
$jobRanking = @() 
$rank = 0 
ForEach($activeJob in $activeJobs) 
{         
    $rank = $rank + 1 
    $activeJob | Add-Member -MemberType NoteProperty -Name jobRanking -Value $rank -Force 
    $jobRanking += $activeJob 
}
    
$AutomationJobId = $PSPrivateMetadata.JobId.Guid 
$currentJob = $activeJobs | where {$_.JobId -eq $AutomationJobId} 
$currentJobRank = $currentJob.jobRanking 

# Only allow the Job with Rank = 1 to start processing. 
If($currentJobRank -ne "1") 
{ 
    Write-Output "$(Get-Date -Format yyyy-MM-dd-hh-mm-ss.ffff) Concurrency check failed as Current Job Ranking is not 1 but $($currentJobRank) therefore exiting..." 
    Exit 
} Else
{
    Write-Output "$(Get-Date -Format yyyy-MM-dd-hh-mm-ss.ffff) Concurrency check passed. Start processing.." 
} 

Если вы хотите, чтобы модуль runbook выполнялся с управляемым удостоверением, назначаемым системой, оставьте код как есть. Если вы предпочитаете использовать управляемое удостоверение, назначаемое пользователем, сделайте следующее:

  1. Из строки 5 удалите $AzureContext = (Connect-AzAccount -Identity).context,
  2. Замените его $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context.
  3. Введите идентификатор клиента.

Примечание.

Для гибридных заданий PowerShell 7.2 внесите изменения в строку 28. Замените $PSPrivateMetadata.JobId.Guid на $env:PSPrivateMetaData.

Обработка временных ошибок в скрипте, зависящем от времени

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

Если runbook обычно работает в условиях ограничения по времени, то для проверки времени выполнения скрипт должен реализовывать логику. Эта проверка обеспечивает выполнение таких операций, как запуск, завершение работы или горизонтальное увеличение масштаба, только в определенное время.

Примечание.

Местное время для процесса песочницы Azure задается в формате UTC. Этот факт следует учитывать при вычислении даты и времени в runbook.

Добавление логики повторных попыток в runbook для предотвращения временных сбоев

Модули Runbook часто вызывают удаленные системы, такие как Azure через ARM, Azure Resource Graph, службы SQL и другие веб-службы. Если система, на которую вызывают модули Runbook, занята, временная недоступность или реализация регулирования при загрузке, вызовы уязвимы для ошибок среды выполнения. Чтобы создать устойчивость в модулях Runbook, необходимо реализовать логику повторных попыток при выполнении вызовов, чтобы модули Runbook могли обрабатывать временные проблемы без сбоя.

Дополнительные сведения см . в шаблонах повторных попыток и общих рекомендациях по REST и повторным попыткам.

Пример 1. Если модуль Runbook выполняет только один или два вызова

$searchServiceURL = "https://$searchServiceName.search.windows.net"
$resource = Get-AzureRmResource -ResourceType "Microsoft.Search/searchServices" -ResourceGroupName $searchResourceGroupName -ResourceName  $searchServiceName -ApiVersion 2015-08-19
$searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey

При вызове Invoke-AzureRmResourceActionмогут возникнуть временные сбои. В таком сценарии рекомендуется реализовать следующий базовый шаблон для вызова командлета.

$searchServiceURL = "https://$searchServiceName.search.windows.net"
$resource = Get-AzureRmResource -ResourceType "Microsoft.Search/searchServices" -ResourceGroupName $searchResourceGroupName -ResourceName  $searchServiceName -ApiVersion 2015-08-19

    # Adding in a retry
    $Stoploop = $false
    $Retrycount = 0
 
    do {
        try   {
               $searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey
               write-verbose "Invoke-AzureRmResourceAction on $resource.ResourceId completed"
               $Stoploop = $true
              }
        catch {
               if ($Retrycount -gt 3)
                 {
                  Write-verbose "Could not Invoke-AzureRmResourceAction on $resource.ResourceId after 3 retrys."
                  $Stoploop = $true
                 }
               else  
                 {
                  Write-verbose "Could not Invoke-AzureRmResourceAction on $resource.ResourceId retrying in 30 seconds..."
                  Start-Sleep -Seconds 30
                  $Retrycount = $Retrycount + 1
                 }
               }
        }
    While ($Stoploop -eq $false)

Примечание.

Попытка повторить вызов составляет до трех раз, спя в течение 30 секунд каждый раз.

Пример 2. Если модуль Runbook выполняет частые удаленные вызовы

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

Function ResilientRemoteCall {

         param(
               $scriptblock
               )
        
         $Stoploop = $false
         $Retrycount = 0
 
         do {
             try   {
                    Invoke-Command -scriptblock $scriptblock 
                    write-verbose "Invoked $scriptblock completed"
                    $Stoploop = $true
                   }
             catch {
                    if ($Retrycount -gt 3)
                      {
                       Write-verbose "Invoked $scriptblock failed 3 times and we will not try again."
                       $Stoploop = $true
                      }
                    else  
                      {
                       Write-verbose "Invoked $scriptblock failed  retrying in 30 seconds..."
                       Start-Sleep -Seconds 30
                       $Retrycount = $Retrycount + 1
                      }
                    }
             }
         While ($Stoploop -eq $false)
}

Затем вы можете передать каждый удаленный вызов в функцию как

ResilientRemoteCall { Get-AzVm }
или

ResilientRemoteCall { $searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey}

Использование нескольких подписок

Последовательность runbook должна поддерживать работу с подписками. Например, для работы с несколькими подписками последовательность runbook использует командлет Disable-AzContextAutosave. Этот командлет гарантирует, что контекст проверки подлинности не будет получен из другой последовательности runbook, выполняющейся в той же песочнице.

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription `
    -DefaultProfile $AzureContext

$childRunbookName = 'childRunbookDemo'
$resourceGroupName = "resourceGroupName"
$automationAccountName = "automationAccountName"

$startParams = @{
    ResourceGroupName     = $resourceGroupName
    AutomationAccountName = $automationAccountName
    Name                  = $childRunbookName
    DefaultProfile        = $AzureContext
}
Start-AzAutomationRunbook @startParams

Если вы хотите, чтобы модуль runbook выполнялся с управляемым удостоверением, назначаемым системой, оставьте код как есть. Если вы предпочитаете использовать управляемое удостоверение, назначаемое пользователем, сделайте следующее:

  1. Из строки 5 удалите $AzureContext = (Connect-AzAccount -Identity).context,
  2. Замените его $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context.
  3. Введите идентификатор клиента.

Работа с пользовательскими скриптами

Примечание.

Обычно пользовательские скрипты и последовательности runbook нельзя запускать на узле с установленным агентом Log Analytics.

Чтобы использовать пользовательский скрипт, выполните следующие действия.

  1. Создайте учетную запись службы автоматизации.
  2. Разверните роль гибридной рабочей роли Runbook.
  3. На компьютере с Linux требуется более высокий уровень привилегий. Войдите, чтобы выключить проверку подписи.

Тестирование модуля Runbook

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

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

Примечание.

Все действия выполнения runbook регистрируются в журнале действий учетной записи службы автоматизации с именем операции создания задания служба автоматизации Azure. Однако выполнение runbook в области тестирования, в которой выполняется черновик модуля Runbook, будет записано в журналы действий с именем операции "Запись служба автоматизации Azure черновик runbook". Выберите вкладку "Операция" и "JSON", чтобы просмотреть область, заканчивающуюся .. /runbooks/(имя runbook)/draft/testjob.

Процедура тестирования одинакова для всех типов runbook. Тестирование выполняется на портале Azure одинаково и в текстовом, и в графическом редакторе.

  1. Откройте черновую версию runbook в текстовом или графическом редакторе.
  2. Щелкните Тест, чтобы открыть страницу тестирования.
  3. Если у runbook имеются параметры, они отображаются в области слева, где можно указать значения для теста.
  4. Если вы хотите запустить тест с гибридной рабочей ролью Runbook, измените Параметры запуска, выбрав значение Гибридная рабочая роль, и выберите имя целевой группы. В противном случае оставьте значение Azure по умолчанию, чтобы тест выполнялся в облаке.
  5. Щелкните Пуск, чтобы начать тестирование.
  6. С помощью кнопок в области вывода можно остановить или приостановить последовательность runbook рабочего процесса PowerShell или графическую последовательность runbook в процессе тестирования. В случае приостановки модуль Runbook завершает действие, начатое до приостановки. Приостановленный модуль Runbook можно остановить или перезапустить.
  7. Проверьте выходные данные модуля runbook в области выходных данных.

Публикация runbook

Перед запуском вновь созданного или импортированного модуля Runbook его необходимо опубликовать. У каждой последовательности runbook в службе автоматизации Azure есть черновая и опубликованная версия. Запустить можно только опубликованную версию, а изменить — только черновую. Изменения, внесенные в черновик, не влияют на опубликованную версию. Если требуется черновая версия, ее можно опубликовать, перезаписав текущую опубликованную версию черновой.

Публикация runbook на портале Azure

  1. На портале Azure найдите и выберите раздел Учетные записи службы автоматизации.
  2. На странице Учетные записи автоматизации выберите в списке нужную учетную запись службы автоматизации.
  3. Откройте runbook в учетной записи службы автоматизации.
  4. Выберите Изменить.
  5. Нажмите кнопку "Опубликовать", а затем нажмите кнопку "Да" в ответ на сообщение проверки.

Публикация runbook с помощью PowerShell

Для публикации runbook используйте командлет Publish-AzAutomationRunbook.

$accountName = "MyAutomationAccount"
$runbookName = "Sample_TestRunbook"
$rgName = "MyResourceGroup"

$publishParams = @{
    AutomationAccountName = $accountName
    ResourceGroupName     = $rgName
    Name                  = $runbookName
}
Publish-AzAutomationRunbook @publishParams

Создание расписания для runbook на портале Azure

После публикации последовательности runbook можно запланировать ее выполнение.

  1. На портале Azure найдите и выберите раздел Учетные записи службы автоматизации.
  2. На странице Учетные записи автоматизации выберите в списке нужную учетную запись службы автоматизации.
  3. Выберите модуль Runbook из списка модулей Runbook.
  4. В разделе Ресурсы выберите Расписания.
  5. Выберите Добавить расписание.
  6. В области "Расписание Runbook" выберите "Связать расписание" с модуном модунке Runbook.
  7. Выберите " Создать новое расписание " в области "Расписание ".
  8. Введите имя, описание и другие параметры в области создания расписания .
  9. После создания расписания выделите его и нажмите кнопку ОК. Теперь оно должно быть связано с последовательностью runbook.
  10. Найдите в почтовом ящике сообщение электронной почты с уведомлением о состоянии runbook.

Восстановление удаленного модуля Runbook

Удаленный модуль Runbook можно восстановить с помощью скриптов PowerShell. Чтобы восстановить модуль Runbook, убедитесь, что выполнены следующие условия:

  • Модули Runbook, которые будут восстановлены, были удалены за последние 29 дней.
  • Учетная запись службы автоматизации для этого модуля Runbook существует.
  • Разрешение роли участника службы автоматизации предоставляется управляемому удостоверению, назначаемого системой учетной записи службы автоматизации.

Сценарий PowerShell

  • Выполните скрипт PowerShell в качестве задания в учетной записи службы автоматизации для восстановления удаленных модулей Runbook.
  • Скачайте сценарий PowerShell из GitHub. Кроме того, можно импортировать скрипт PowerShell с именем Runbook службы "Восстановление службы автоматизации" из коллекции Runbook. Укажите имя модуля Runbook, который необходимо восстановить и запустить как задание в служба автоматизации Azure для восстановления удаленных модулей Runbook.
  • Скачайте скрипт из GitHub или импортируйте скрипт PowerShell с именем List Deleted Automation Runbook из коллекции Runbook, чтобы определить имена модулей Runbook, которые были удалены за последние 29 дней.

Получение данных о состоянии заданий

Просмотр состояний на портале Azure

Подробные сведения об обработке заданий в службе автоматизации Azure приведены в разделе Задания. Когда вы будете готовы просмотреть задания runbook, воспользуйтесь порталом Azure и войдите в учетную запись службы автоматизации. В области Статистика по заданиям справа можно просмотреть сводку по всем заданиям runbook.

Job Statistics tile

В сводке отображается количество и графическое представление состояний всех выполненных заданий.

Щелкните плитку, чтобы открылась страница "Задания", на которой представлен сводный список всех выполненных заданий. На этой странице отображаются сведения о состоянии, имени runbook, времени запуска и времени выполнения каждого задания.

Screenshot of the Jobs page.

Список заданий можно отфильтровать, выбрав Фильтровать задания. Отфильтруйте список по определенной последовательности runbook или состоянию задания либо выберите вариант из раскрывающегося списка и укажите диапазон времени для поиска.

Filter job status

Кроме того, для просмотра сводных данных о состоянии заданий определенной последовательности runbook можно выбрать ее модуль на странице "Модули Runbook" учетной записи службы автоматизации, а затем выбрать элемент Задания. При выполнении этого действия отображается страница "Задания". Здесь можно щелкнуть запись задания, чтобы просмотреть сведения о ней и ее выходные данные.

Screenshot of the Jobs page with the Errors button highlighted.

Получение данных о состоянии заданий с помощью PowerShell

Чтобы получить список созданных заданий для последовательности runbook и сведения о конкретном задании, воспользуйтесь командлетом Get-AzAutomationJob. Если вы запускаете последовательность runbook с помощью Start-AzAutomationRunbook, возвращается результирующее задание. Для получения выходных данных задания используйте командлет Get-AzAutomationJobOutput.

В приведенном ниже примере извлекаются сведения о последнем задании для примера runbook и отображаются данные о его состоянии, значения, заданные для параметров runbook, а также выходные данные этого задания.

$getJobParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Runbookname           = 'Test-Runbook'
}
$job = (Get-AzAutomationJob @getJobParams | Sort-Object LastModifiedDate -Desc)[0]
$job | Select-Object JobId, Status, JobParameters

$getOutputParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Id                    = $job.JobId
    Stream                = 'Output'
}
Get-AzAutomationJobOutput @getOutputParams

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

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Stream                = 'Any'
}
$output = Get-AzAutomationJobOutput @params

foreach ($item in $output) {
    $jobOutParams = @{
        AutomationAccountName = 'MyAutomationAccount'
        ResourceGroupName     = 'MyResourceGroup'
        Id                    = $item.StreamRecordId
    }
    $fullRecord = Get-AzAutomationJobOutputRecord @jobOutParams

    if ($fullRecord.Type -eq 'Error') {
        $fullRecord.Value.Exception
    } else {
        $fullRecord.Value
    }
}

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