Как можно проверить, где запущена книга выполнения 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

}

Не очень красиво, но работает нормально.

Другие вопросы по тегам