【问题标题】:What is a method for checking where an Azure Automation runbook (PowerShell) is running?检查 Azure 自动化运行手册 (PowerShell) 运行位置的方法是什么?
【发布时间】:2019-02-03 08:04:42
【问题描述】:

我正在 Azure 自动化中编写一组 PowerShell Runbook。其中一些在本地运行(ala 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 似乎不起作用,因为 throw、exit 或 break 都不会导致 Runbook 退出。还在寻找工作方法...

【问题讨论】:

    标签: azure powershell automation runbook


    【解决方案1】:

    您可以使用 $PSPrivateMetadata 进行测试

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

    【讨论】:

    • 谢谢。这看起来不错。我无法在项目完成后尝试它,但是当我开发我的项目时,throw 和 exit 都不会将我踢出脚本。这对你有用吗?我想知道它在过去 9 个月内是否发生了变化
    【解决方案2】:

    我遇到了完全相同的问题,但没有让它工作。 最后得到了另一个解决方案,我只是在运行手册的顶部运行它,或者如果您有输入参数,则直接在我的参数列表之后运行。

    $checkHybridWorker = hostname
    
    if ($checkHybridWorker -ne "myhybridworkerhostname"){
    
            Write-Warning "Job must be started from Hybrid worker, exiting."
            Exit 1
    
    }
    

    不漂亮,但效果很好。

    【讨论】:

    • 您的意思是 psprivatemetadata 方法不起作用吗?我很好奇,因为我没有机会测试该方法(去年在开发我的脚本时,throw 和 exit 对我不起作用)。
    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 2021-12-21
    • 2016-09-10
    • 2022-01-13
    • 2016-06-17
    • 1970-01-01
    • 2020-12-20
    • 2022-10-21
    相关资源
    最近更新 更多