Я пишу набор модулей 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 выдаст ошибку (по желанию). Если он запускается на гибридном рабочем компьютере, он ничего не делает (позволяя запустить остальную часть книги запусков).
Мне любопытно, может ли кто-нибудь найти лучший метод.
Обновление 2: Этот oneliner, похоже, не работает, так как ни бросок, ни выход, ни разрыв не приведут к выходу книги запусков. Все еще ищу способ работы ...