Время от времени мы обнаруживаем, что модуль Runbook автоматизации Azure выходит из строя со следующей ошибкой:
Get-AutomationPSCredential : The term 'Get-AutomationPSCredential' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is
correct and try again.
At line:1 char:9
+ $cred = Get-AutomationPSCredential -Name SqlJobRunner
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-AutomationPSCredential:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Различные наши модули Runbook выдают эту ошибку, по-видимому, на random.
Get-AutomationPSCredential
- это модуль, предоставляемый Azure. Это не наш код, это код Microsoft.
И иногда кажется, что он просто «уходит».
Так что здесь происходит? Инфраструктура автоматизации Azure перезагружает или обновляет модули в неподходящее время для нашей работы? У меня создалось впечатление, что после планирования модуля Runbook зависимые модули «привязываются» к модулю Runbook, поэтому они будут там, когда это необходимо.
Почему это происходит и что? лучшая защита от сбоев?
Мне позвонили из службы поддержки Microsoft Azure с основной причиной.
Служба автоматизации Azure в моем регионе (восточная часть США) работает на PowerShell 5.0. Они сказали, что в 5.0 есть проблема в том, что модули загружаются асинхронно. Поэтому нет гарантии, что межмодульные зависимости будут доступны.
Они сказали мне, что дефект будет исправлен в августе, когда они выпустят PowerShell 5.1 для восточного региона США.
Они предложили два решения:
Другим средством защиты может быть импорт необходимого модуля, где я нужно это. Сложность при этом заключается в том, что рассматриваемая функция Get-AutomationPSCredential исходит из другой сборки при локальной разработке, чем при выполнении в контексте автоматизации. При локальной разработке с использованием набора средств автоматизации разработки Azure команда находится в сборке AzureAutomationAuthoringToolkit
. В Azure это Orchestrator.AssetManagement.Cmdlets
.
Я просто попробую следующее:
Импорт-модуль Orchestrator.AssetManagement.Cmdlets -ErrorAction SilentlyContinue
При выполнении в среде ISE функция всегда будет там, и этот Импорт-модуль завершится с ошибкой.
Согласно вашему описанию, мы должны проверить, есть ли у модуля импорт. Если нет, то необходимо его импортировать.
Для проверки можно воспользоваться порталом:
Учетная запись автоматизации-> модули->Orchestrator.AssetManagement.Cmdlets:
Если мы его не импортируем, надо использовать портал для импорта этого модуля: