Что такое метод проверки работоспособности Runbook автоматизации Azure (PowerShell)? - PullRequest
0 голосов
/ 28 августа 2018

Я пишу набор модулей 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, похоже, не работает, так как ни бросок, ни выход, ни разрыв не приведут к выходу книги запусков. Все еще ищу способ работы ...

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

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

$checkHybridWorker = hostname

if ($checkHybridWorker -ne "myhybridworkerhostname"){

        Write-Warning "Job must be started from Hybrid worker, exiting."
        Exit 1

}

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

0 голосов
/ 06 мая 2019

Вы можете проверить, используя $ PSPrivateMetadata

  begin {
        if ($null -eq $PSPrivateMetadata) {
            throw "This command can only be run within the context of an Azure Automation Runbook Worker"
        }
    }
...