Устранение неполадок с последовательностями runbook

В этой статье описываются возможные проблемы с последовательностями runbook и способы их устранения. Общие сведения см. в статье Выполнение последовательности runbook в службе автоматизации Azure.

Ошибка Start-AzAutomationRunbook с сообщением об ошибке RunbookName не соответствует ожидаемому шаблону.

Проблема

При запуске Start-AzAutomationRunbook определенных модулей Runbook:

start-azautomationRunbook -Name "Test_2" -AutomationAccountName "AutomationParent" -ResourceGroupName "AutomationAccount" 

Ошибка завершается со следующей ошибкой:

Start-AzAutomationRunbook: "runbookname" does not match expected pattern '^[a-zA-Z]*-*[a-zA-Z0-9]*$'

Причина

Код, представленный в версии 1.9.0 модуля Az.Automation, проверяет имена модулей Runbook для запуска и неправильно флагов runbook с несколькими символами "-" или символом "_" в имени как недопустимое.

Решение

Рекомендуется отменить изменения до версии 1.8.0 модуля.

Разрешение

В настоящее время мы работаем над развертыванием исправления для решения этой проблемы.

Диагностика проблем с runbook

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

  1. Убедитесь, что скрипт runbook успешно выполнен на локальном компьютере.

    Справочные сведения по языку и обучающие модули см. в документации по PowerShell или Python. Локальное выполнение скрипта позволяет обнаружить и устранить распространенные ошибки, например:

    • отсутствующие модули;
    • синтаксические ошибки;
    • логические ошибки.
  2. Изучите потоки ошибок в runbook.

    Просмотрите конкретные сообщения об ошибках в этих потоках и сопоставьте их с ошибками, описанными в этой статье.

  3. Убедитесь, что узлы и рабочая область службы автоматизации содержат необходимые модули.

    Если runbook импортирует все модули, убедитесь, что они доступны для учетной записи службы автоматизации, выполнив действия, описанные в разделе Импорт модулей. Обновите модули PowerShell до последней версии, выполнив инструкции в статье Обновление модулей Azure PowerShell в службе автоматизации Azure. Дополнительные сведения об устранении неполадок см. в разделе об устранении неполадок в модулях.

  4. Если выполнение runbook приостановлено или завершилось неожиданным сбоем, выполните следующие действия.

  5. Выполните этот шаг, если задание runbook или среда с гибридной рабочей ролью Runbook не отвечает.

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

Сценарий. Не удается создать новое задание автоматизации в регионе Западной Европы

Проблема

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

Причина

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

Разрешение

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

  • Если вы используете начало часа для создания задания (в 12:00, 1:00, 2:00 и т. д.), обычно в час или полчаса, рекомендуется переместить время начала задания в пять минут до или после часа/полчаса. Это связано с тем, что большинство клиентов используют начало часа для выполнения задания, что резко увеличивает нагрузку на службу, в то время как загрузка относительно низка в других слотах времени.

Сценарий: Runbook завершается ошибкой "это. Client.SubscriptionId не может иметь значение NULL. Сообщение об ошибке

Проблема

Модуль Runbook с помощью управляемого удостоверения Подключение-AzAccount -Identity, который пытается управлять объектами Azure, не работает успешно и регистрирует следующую ошибку:this.Client.SubscriptionId cannot be null.

get-azvm : 'this.Client.SubscriptionId' cannot be null. At line:5 char:1 + get-azvm + ~~~~~~~~ + CategoryInfo : CloseError: (:) [Get-AzVM], ValidationException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.GetAzureVMCommand

Причина

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

Разрешение

Предоставьте управляемому удостоверению (или другой учетной записи, используемой в runbook) соответствующую роль в подписке. Подробнее

 Screenshot that shows the assigning of Azure Role assignments.

Screenshot that shows how to add role assignment.

Сценарий. Доступ заблокирован для службы хранилища Azure, Azure Key Vault или Azure SQL

В этом сценарии в качестве примера используется служба хранилища Azure, однако он также применим кAzure Key Vault и Azure SQL.

Проблема

Попытка получить доступ к службе хранилища Azure из модуля runbook приводит к ошибке с сообщением, похожим на следующее: The remote server returned an error: (403) Forbidden. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation.

Причина

Для службы хранилища Azure включен брандмауэр Azure.

Разрешение

Включение Брандмауэра Azure для службы хранилища Azure, Azure Key Vault или Azure SQL блокирует для этих служб доступ из модулей runbook Службы автоматизации Azure. Доступ будет заблокирован даже в том случае, если задано исключение брандмауэра, разрешающее доверенные службы Майкрософт, так как служба автоматизации не входит в список таких служб. С включенным брандмауэром доступ возможен только с помощью гибридной рабочей роли Runbook и конечной точки службы для виртуальной сети.

Сценарий. Выполнение последовательности runbook прекратилось с ошибкой "Нет разрешения" или "Запрещено 403"

Проблема

Выполнение последовательности runbook прекратилось с ошибкой "Нет разрешения", "Запрещено 403" или эквивалентной.

Причина

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

Разрешение

Убедитесь, что у вашей учетной записи запуска от имени есть разрешения на доступ к любым ресурсам, используемым в скрипте.

Сценарий: не удалось войти в учетную запись Azure

Проблема

При работе с командлетом Connect-AzAccount происходит одна из следующих ошибок.

Unknown_user_type: Unknown User Type
No certificate was found in the certificate store with thumbprint

Причина

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

Разрешение

Чтобы определить причину ошибки, выполните следующие действия:

  1. Убедитесь, что вы не использовали специальные символы. В имени ресурса учетных данных службы автоматизации Azure, используемом для подключения к Azure, запрещается вводить такие специальные символы, как \@.

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

    $Cred = Get-Credential
    #Using Azure Service Management
    Add-AzureAccount -Credential $Cred
    #Using Azure Resource Manager
    Connect-AzAccount -Credential $Cred
    
  3. Если проверка подлинности завершается ошибкой локально, вы не настроили учетные данные Microsoft Entra должным образом. Чтобы правильно настроить учетную запись Microsoft Entra, см. статью "Проверка подлинности в Azure с помощью идентификатора Microsoft Entra".

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

    $logonAttempt = 0
    $logonResult = $False
    
    while(!($connectionResult) -And ($logonAttempt -le 10))
    {
        $LogonAttempt++
        #Logging in to Azure...
        $connectionResult = Connect-AzAccount `
        Start-Sleep -Seconds 30
        if($connectionResult)
        {
           $logonResult = $True 
        }
    }
    

Сценарий. Выполнение входа с помощью Login-AzureRMAccount

Проблема

При запуске модуля runbook отображается следующее сообщение об ошибке:

Run Login-AzureRMAccount to login.

Причина

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

Эта ошибка происходит по двум основным причинам.

  • Используются разные версии модуля AzureRM или Az.
  • Вы пытаетесь получить доступ к ресурсам в отдельной подписке.

Разрешение

Если эта ошибка происходит после обновления одного модуля AzureRM или Az, обновите все модули до одной версии.

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

  1. Перейдите к учетной записи запуска от имени службы автоматизации и скопируйте идентификатор приложения и отпечаток.

    Copy Application ID and Thumbprint

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

    Access control

  3. Добавьте идентификатор приложения, полученный ранее. Выберите разрешения на уровне Участник.

    Add role assignment

  4. Скопируйте имя подписки.

  5. Теперь можно использовать следующий код runbook для проверки разрешений учетной записи службы автоматизации в другой подписке. Замените <CertificateThumbprint> значением, скопированным на шаге 1. Замените "<SubscriptionName>" значением, скопированным на шаге 4.

    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint "<CertificateThumbprint>"
    #Select the subscription you want to work with
    Select-AzSubscription -SubscriptionName '<YourSubscriptionNameGoesHere>'
    
    #Test and get outputs of the subscriptions you granted access.
    $subscriptions = Get-AzSubscription
    foreach($subscription in $subscriptions)
    {
        Set-AzContext $subscription
        Write-Output $subscription.Name
    }
    

Сценарий. Не удается найти подписку Azure

Проблема

При работе с командлетом Select-AzureSubscription, Select-AzureRMSubscription или Select-AzSubscription произошла следующая ошибка:

The subscription named <subscription name> cannot be found.

Ошибка

Эта ошибка может произойти, если:

  • имя подписки указано неправильно;
  • Пользователь Microsoft Entra, который пытается получить сведения о подписке, не настроен в качестве администратора подписки.
  • Командлет недоступен.
  • Произошло переключение контекста.

Разрешение

Сведения о переключении контекста см. в разделе "Переключение контекста" в служба автоматизации Azure.

Сценарий. Сбой последовательности runbook при работе с несколькими подписками

Проблема

При выполнении последовательностей runbook им не удается управлять ресурсами Azure.

Причина

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

Могут возникнуть следующие ошибки:

Get-AzVM : The client '<client-id>' with object id '<object-id> does not have authorization to perform action 'Microsoft.Compute/virtualMachines/read' over scope '/subscriptions/<subcriptionIdOfSubscriptionWichDoesntContainTheVM>/resourceGroups/REsourceGroupName/providers/Microsoft.Compute/virtualMachines/VMName '.
   ErrorCode: AuthorizationFailed
   StatusCode: 403
   ReasonPhrase: Forbidden Operation
   ID : <AGuidRepresentingTheOperation> At line:51 char:7 + $vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $UNBV... +

или, как показано ниже.

Get-AzureRmResource : Resource group "SomeResourceGroupName" could not be found.
... resources = Get-AzResource -ResourceGroupName $group.ResourceGro ...
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzResource], CloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

Разрешение

Чтобы избежать случайной попытки доступа к неправильной подписке, см. раздел "Переключение контекста" в служба автоматизации Azure.

Сценарий: сбой аутентификации в Azure из-за включенной многофакторной проверки подлинности

Проблема

При проверке подлинности в Azure с помощью имени и пароля происходит следующая ошибка:

Add-AzureAccount: AADSTS50079: Strong authentication enrollment (proof-up) is required

Причина

Если у вас есть многофакторная проверка подлинности в учетной записи Azure, вы не можете использовать пользователя Microsoft Entra для проверки подлинности в Azure. Вместо этого используйте для проверки подлинности сертификат или субъект-службу.

Разрешение

Сведения об использовании субъекта-службы с командлетами диспетчера ресурсов Azure см. в статьях о создании субъекта-службы с помощью портала Azure и о проверке подлинности субъекта-службы в Azure Resource Manager.

Сценарий. Сбой runbook с сообщением об ошибке "Задача была отменена"

Проблема

В модуле Runbook возникает ошибка, аналогичная приведенной ниже:

Exception: A task was cancelled.

Причина

Это ошибка может быть вызвана использованием устаревших модулей Azure.

Разрешение

Эту ошибку можно устранить, обновив модули Azure до последней версии.

  1. В учетной записи службы автоматизации последовательно выберите Модули и Обновить модули Azure.
  2. Обновление занимает примерно 15 минут. После его завершения повторно запустите последовательность runbook, которая завершилась сбоем.

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

Сценарий. Термин не распознан как имя командлета, функции или скрипта

Проблема

В модуле Runbook возникает ошибка, аналогичная приведенной ниже:

The term 'Connect-AzAccount' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if the path was included verify that the path is correct and try again.

Причина

Эта ошибка может происходить по следующим причинам:

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

Разрешение

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

Сценарий. Сбой командлета в runbook PowerShell PnP на служба автоматизации Azure

Проблема

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

Причина

Чаще всего эта проблема возникает, когда служба автоматизации Azure обрабатывает последовательности runbook, которые вызывают командлеты PowerShell PnP, например add-pnplistitem, без перехвата возвращаемых объектов.

Разрешение

Измените скрипты, чтобы все возвращаемые значения присваивались переменным, а командлеты не предпринимали попытки записи целых объектов в стандартный поток вывода. Скрипт может перенаправить поток вывода в командлет, как показано ниже.

  $null = add-pnplistitem

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

$SomeVariable = add-pnplistitem ....
if ($SomeVariable.someproperty -eq ....

Сценарий: не удается распознать командлет при выполнении модуля Runbook

Проблема

Выполнение задания Runbook завершилось ошибкой.

<cmdlet name>: The term <cmdlet name> is not recognized as the name of a cmdlet, function, script file, or operable program.

Причина

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

Разрешение

Эту проблему можно устранить любым из следующих способов.

  • Проверьте правильность ввода имени командлета.
  • Убедитесь, что командлет имеется в учетной записи службы автоматизации, а конфликты отсутствуют. Чтобы проверить наличие командлета, откройте runbook в режиме редактирования и найдите требуемый командлет в библиотеке или выполните команду Get-Command <CommandName>. Убедившись в наличии командлета в учетной записи и отсутствии конфликта имен с другими командлетами или последовательностями runbook, добавьте его на холст. Убедитесь, что в runbook используется допустимый набор параметров.
  • Если обнаружен конфликт имен, а сам командлет доступен в двух разных модулях, эту проблему можно решить использованием полного имени командлета. Например, вы можете использовать значение ModuleName\CmdletName.
  • Если runbook выполняется локально в группе гибридных рабочих ролей, убедитесь, что на компьютере, где размещена гибридная рабочая роль, установлен соответствующий модуль или командлет.

Сценарий: неправильная ссылка на объект при вызове Add-AzAccount

Проблема

Эта ошибка происходит при работе с псевдонимом Add-AzAccount для командлета Connect-AzAccount.

Add-AzAccount : Object reference not set to an instance of an object

Причина

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

Сценарий. Ссылка на объект не задана для экземпляра объекта

Проблема

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

Object reference not set to an instance of an object

Причина

Если поток содержит объекты, Start-AzAutomationRunbook неправильно обрабатывает поток вывода.

Разрешение

Реализуйте логику опроса и используйте для получения выходных данных командлет Get-AzAutomationJobOutput. Пример этой логики определяется здесь:

$AutomationAccountName = "ContosoAutomationAccount"
$RunbookName = "ChildRunbookExample"
$ResourceGroupName = "ContosoRG"

function IsJobTerminalState([string]$Status) {
  $TerminalStates = @("Completed", "Failed", "Stopped", "Suspended")
  return $Status -in $TerminalStates
}

$StartAzAutomationRunbookParameters = @{
  Name = $RunbookName
  AutomationAccountName = $AutomationAccountName
  ResourceGroupName = $ResourceGroupName
}
$Job = Start-AzAutomationRunbook @StartAzAutomationRunBookParameters
$PollingSeconds = 5
$MaxTimeout = New-TimeSpan -Hours 3 | Select-Object -ExpandProperty TotalSeconds
$WaitTime = 0
while(-NOT (IsJobTerminalState $Job.Status) -and $WaitTime -lt $MaxTimeout) {
   Start-Sleep -Seconds $PollingSeconds
   $WaitTime += $PollingSeconds
   $Job = $Job | Get-AzAutomationJob
}

$Job | Get-AzAutomationJobOutput | Get-AzAutomationJobOutputRecord | Select-Object -ExpandProperty Value

Сценарий: сбой модуля Runbook из-за десериализованного объекта

Проблема

Выполнение модуля Runbook завершилось ошибкой.

Cannot bind parameter <ParameterName>.

Cannot convert the <ParameterType> value of type Deserialized <ParameterType> to type <ParameterType>.

Причина

Когда runbook является рабочим процессом PowerShell, он хранит сложные объекты в десериализированном формате, чтобы сохранить состояние модуля при приостановке рабочего процесса.

Разрешение

Эту проблему можно устранить любым из следующих способов.

  • Если сложные объекты передаются от одного командлета к другому через конвейер, используйте в качестве оболочки для этих командлетов действие InlineScript.
  • Передайте только требуемое имя или значение сложного объекта, а не весь объект.
  • Используйте модуль Runbook PowerShell, а не модуль Runbook рабочего процесса PowerShell.

Сценарий. Состояние "400 — недопустимый запрос" при вызове веб-перехватчика.

Проблема

При попытке вызова веб-перехватчика для runbook службы автоматизации Azure происходит следующая ошибка:

400 Bad Request : This webhook has expired or is disabled

Причина

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

Разрешение

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

Сценарий. "429: слишком большая текущая частота запросов"

Проблема

При выполнении командлета Get-AzAutomationJobOutput вы получаете следующее сообщение об ошибке:

429: The request rate is currently too large. Please try again

Причина

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

Разрешение

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

  • Измените модуль Runbook и уменьшите количество потоков заданий, которые он выдает.
  • уменьшите количество потоков, полученных при выполнении командлета. Для этого можно задать значение параметра Stream для командлета Get-AzAutomationJobOutput, чтобы получить только потоки вывода. ​

Сценарий. Сбой задания Runbook из-за превышения выделенной квоты

Проблема

Выполнение задания Runbook завершилось ошибкой.

The quota for the monthly total job run time has been reached for this subscription

Причина

Эта ошибка возникает, когда время выполнения задания превышает квоту для учетной записи в 500 бесплатных минут. Эта квота применяется ко всем типам задач на выполнение заданий. К этим типам задач может относиться тестирование задания, запуск задания на портале Azure, выполнение задания с помощью веб-перехватчиков, а также планирование задания с помощью портала Azure или центра обработки данных. Дополнительные сведения см. на странице цен на службу автоматизации.

Разрешение

Если на обработку вам требуется более 500 минут в месяц, выберите для подписки уровень "Базовый" вместо уровня "Бесплатный".

  1. Вход в вашу подписку Azure.
  2. Выберите учетную запись службы автоматизации, которую вы хотите обновить.
  3. Выберите Параметры, а затем — Цены.
  4. В нижней части страницы нажмите кнопку Включить, чтобы обновить свою учетную запись до уровня "Базовый".

Сценарий: поток вывода runbook больше 1 МБ

Проблема

Работа модуля runbook в песочнице Azure завершилась следующей ошибкой:

The runbook job failed due to a job stream being larger than 1MB, this is the limit supported by an Azure Automation sandbox.

Причина

Данная ошибка возникла потому, что последовательность runbook попыталась записать слишком много данных об исключении в поток вывода.

Разрешение

Для потока вывода задания установлено ограничение на уровне 1 МБ. Убедитесь, что runbook включает вызовы в исполняемый файл или вложенный процесс с помощью блоков try и catch. Если операции приводят к исключению, код будет записывать сообщение из исключения в переменную службы автоматизации. Этот подход предотвращает запись сообщения в поток вывода задания. Для выполнения заданий гибридной рабочей роли Runbook поток вывода, усеченный до 1 МБ, отображается без сообщения об ошибке.

Сценарий. Предприняты три неудачные попытки запуска задания runbook

Проблема

Последовательность runbook завершается сбоем со следующей ошибкой:

The job was tried three times but it failed

Причина

Эта ошибка происходит из-за одной из следующих проблем.

  • Предельный объем памяти. Задание может завершиться ошибкой, если оно использует более 400 МБ памяти. Ограничения на выделяемый песочнице объем памяти описаны в разделе Ограничения службы автоматизации.

  • Сетевые сокеты. В песочницах Azure одновременно может выполняться не более 1000 сетевых сокетов. Дополнительные сведения см. в статье Ограничения службы автоматизации.

  • Несовместим модуль. Зависимости модуля могут быть неправильными. В этом случае runbook обычно возвращает сообщение Command not found или Cannot bind parameter.

  • Для песочницы отсутствует проверка подлинности в Active Directory. Последовательность runbook попыталась вызвать исполняемый файл или подпроцесс, который запущен в песочнице Azure. Настройка модулей Runbook для проверки подлинности с помощью идентификатора Microsoft Entra с помощью библиотеки проверки подлинности Azure Active Directory (ADAL) не поддерживается.

Разрешение

  • Ограничение памяти, сетевые сокеты. Чтобы избежать превышения предельного объема памяти, рекомендуется разделить рабочую нагрузку между несколькими последовательностями runbook, не обрабатывать слишком большой объем данных в памяти, не записывать ненужные выходные данные из последовательностей runbook и учитывать, сколько контрольных точек записывается в последовательности runbook рабочих процессов PowerShell. Чтобы очистить переменную и немедленно запустить сборку мусора, вы можете использовать методы $myVar.clear и [GC]::Collect соответственно. Эти действия уменьшают объем памяти, занимаемой модулем runbook во время выполнения.

  • Несовместим модуль. Обновите модули Azure, выполнив инструкции, приведенные в статье об обновлении модулей Azure PowerShell в учетной записи службы автоматизации Azure.

  • Для песочницы отсутствует проверка подлинности в Active Directory. При проверке подлинности в идентификаторе Microsoft Entra с помощью модуля Runbook убедитесь, что модуль Azure AD доступен в учетной записи службы автоматизации. Не забудьте предоставить учетной записи запуска от имени необходимые разрешения для выполнения задач, которые автоматизируются последовательностью runbook.

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

Сценарий. Сбой задания PowerShell с сообщением об ошибке "Не удается вызвать метод"

Проблема

При запуске задания PowerShell в последовательности runbook, запущенной в Azure, отображается следующее сообщение об ошибке:

Exception was thrown - Cannot invoke method. Method invocation is supported only on core types in this language mode.

Причина

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

Разрешение

Эту проблему можно решить двумя способами:

  • Вместо Start-Job используйте Start-AzAutomationRunbook для запуска runbook.
  • Попытайтесь запустить runbook с использованием гибридной рабочей роли Runbook.

Дополнительные сведения об этом и других видах поведения последовательностей runbook службы автоматизации Azure см. в статье о выполнении runbook в службе автоматизации Azure.

Сценарий: выполнение последовательности runbook длится долго и не завершается

Проблема

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

The job was evicted and subsequently reached a Stopped state. The job cannot continue running.

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

Причина

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

Разрешение

Одно из рекомендуемых решений — запустить runbook в гибридной рабочей роли Runbook. Гибридные рабочие роли не ограничены тремя часами для справедливого распределения, как песочницы Azure. Последовательности runbook, выполняемые в гибридных рабочих ролях Runbook, следует разрабатывать с поддержкой перезапуска при возникновении непредвиденных проблем локальной инфраструктуры.

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

Командлеты PowerShell для реализации дочерних runbook:

  • Start-AzAutomationRunbook. Этот командлет позволяет запустить runbook и передать в него параметры.
  • Get-AzAutomationJob. Если есть операции, которые нужно выполнить после выполнения дочерней последовательности runbook, этот командлет позволяет проверить состояние задания для каждой дочерней последовательности.

Сценарий. Ошибка в потоках заданий из-за метода get_SerializationSettings

Проблема

Для последовательности runbook в потоке задания происходит следующая ошибка:

Connect-AzAccount : Method 'get_SerializationSettings' in type
'Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient' from assembly
'Microsoft.Azure.Commands.ResourceManager.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
does not have an implementation.
At line:16 char:1
+ Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -Appl ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Connect-AzAccount], TypeLoadException
    + FullyQualifiedErrorId : System.TypeLoadException,Microsoft.Azure.Commands.Profile.ConnectAzAccountCommand

Причина

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

Разрешение

Мы не рекомендуем использовать командлеты Az и AzureRM в одной последовательности runbook. Дополнительные сведения о правильном использовании модулей см. в разделе Миграция в модули Az.

Сценарий. Доступ запрещен при использовании песочницы Azure для runbook или приложения

Проблема

При попытке запуска runbook или приложения в песочнице Azure среда запрещает доступ.

Причина

Эта проблема может возникать, поскольку песочницы Azure запрещают доступ ко всем COM-серверам вне процессов. Например, изолированное приложение или последовательность runbook не может вызывать инструментарий управления Windows (WMI) или службу установщика Windows (msiserver.exe).

Разрешение

Дополнительные сведения об использовании изолированных программ Azure см. в разделе Среда выполнения runbook.

Сценарий. Недопустимый код состояния при использовании Key Vault внутри модуля Runbook

Проблема

При попытке получить доступ к Azure Key Vault с помощью последовательности runbook службы автоматизации Azure происходит следующая ошибка:

Operation returned an invalid status code 'Forbidden'

Причина

Возможны следующие причины этой проблемы.

  • Не используется учетная запись запуска от имени.
  • Недостаточно разрешений.

Разрешение

Не используется учетная запись запуска от имени

Выполните шаг 5 Добавление проверки подлинности для управления ресурсами Azure и убедитесь, что для доступа к Key Vault используется учетная запись запуска от имени.

Недостаточно разрешений

Добавьте разрешения для Key Vault, чтобы обеспечить учетной записи запуска от имени достаточные разрешения для доступа к Key Vault.

Сценарий: сбой Runbook из-за ошибки "Parameter length exceeded"

Проблема

Runbook использует параметры и завершается сбоем со следующей ошибкой:

Total Length of Runbook Parameter names and values exceeds the limit of 30,000 characters. To avoid this issue, use Automation Variables to pass values to runbook.

Причина

Существует ограничение на общую длину символов всех параметров, которые могут быть предоставлены в модулях Runbook Python 2.7, Python 3.8 и PowerShell 7.1. Общая длина всех имен параметров и значений параметров не должна превышать 30 000 символов.

Разрешение

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

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

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

  • Получите ответы специалистов Azure на форумах Azure.
  • Подпишитесь на @AzureSupport, официальный канал Microsoft Azure для улучшения качества взаимодействия с клиентами. Служба поддержки Azure взаимодействует с сообществом Azure, предоставляя ответы, поддержку и советы экспертов.
  • Если вам нужна дополнительная помощь, отправьте запрос в службу поддержки Azure. Перейдите на сайт поддержки Azure и выберите Получить поддержку.