Как можно проверить, где запущена книга выполнения Azure Automation (PowerShell)?
Я пишу набор модулей PowerShell в Azure Automation. Некоторые из них запускаются локально (аля Hybrid Runbook Worker), а некоторые - в Azure напрямую.
Я хотел бы немедленно выдать ошибку и выйти из любых гибридных сценариев, если они случайно запускаются в Azure (так как это выбор по умолчанию при использовании портала).
Я думал, что я проверяю, получая результаты Get-AutomationConnection -Name AzureRunAsConnection
но для ответа требуется около 4 секунд, но он также возвращает значения при запуске через Hybrid Worker. Кто-нибудь знает лучший / более быстрый метод?
Спасибо!
Обновление: грубая, но, кажется, работает одна строка:
Try {$AmIInAzure = Get-AzureRmEnvironment AzureCloud -ErrorAction Stop;Throw "This runbook must be run on-premises via Hybrid Runbook Worker. Exiting."} Catch {}
Переменная $AmIInAzure просто используется, чтобы скрыть выходные данные Get-AzureRMEnvironment, а Try..Catch - чтобы скрыть любые ошибки. Если этот код запускается в Azure, он выбросит указанный текст, и Runbook выдаст ошибку (по желанию). Если он запускается на гибридном рабочем компьютере, он ничего не делает (что позволяет запустить остальную часть runbook).
Мне любопытно, если у кого-то может быть лучший метод.
Обновление 2: похоже, что oneliner не работает, поскольку ни бросок, ни выход, ни разрыв не приведут к выходу Runbook. Все еще ищу способ работы...
0 ответов
Вы можете проверить, используя $PSPrivateMetadata
begin {
if ($null -eq $PSPrivateMetadata) {
throw "This command can only be run within the context of an Azure Automation Runbook Worker"
}
}
У меня была точно такая же проблема, и я не заставил ее работать. В конце концов, я предлагаю другое решение. Я просто запускаю его в верхней части своего модуля Runbook или сразу после моего списка параметров, если у вас есть входные параметры.
$checkHybridWorker = hostname
if ($checkHybridWorker -ne "myhybridworkerhostname"){
Write-Warning "Job must be started from Hybrid worker, exiting."
Exit 1
}
Не очень красиво, но работает нормально.