Azure Runbook检查状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Azure Runbook检查状态相关的知识,希望对你有一定的参考价值。

以前有人可能遇到过这个问题吗?有一个Azure自动化运行手册,该手册在下面运行Powershell脚本。它检查runbook是否已经有正在运行的作业,如果没有,则执行一些脚本。如果我在“测试窗格”上运行它,则可以正常工作,但是一旦我通过计划运行或作为作业开始运行,它就始终存在并且正在运行输出作业。没有运行100%的作业,再加上从我的笔记本电脑Powershell运行它,它显示运行也不正常。为什么它在测试窗格上运行良好,但在正常运行时失败?

param (
[string]$runbook = "test-rb",
[string]$rgName = "test-rg",
[string]$aaName = "test-aa"
)

$jobs = Get-AzAutomationJob -ResourceGroupName $rgName -AutomationAccountName $aaName -RunbookName $runbook
#$Jobs.status

# Check to see if it is already running

if (($jobs.status -contains "Running") -Or ($jobs.Status -eq "New"))
{   
    Write-Output "Runbook execution is stopped [$runbook] - there is another job currently running."
    exit 1
} 
else
{
    Write-Output "Proceed with runbook execution [$runbook]  - there are no interfering jobs running."
}

try {
    ....my script
}
catch {
    ....something something
}

答案

由于运行该作业,它会通过命令Running本身作为Get-AzAutomationJob作业,在脚本中添加Write-Output $jobs,请参见下面的屏幕截图,注意IdJobId一样。

enter image description here

要解决此问题,您可以使用$jobs = $jobs[1..($jobs.Length-1)],它将排除自身,然后脚本可以正常工作。

我的样本

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    "Logging in to Azure..."
    $null = Add-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}
$jobs = Get-AzAutomationJob -ResourceGroupName <resourcegroup-name> -AutomationAccountName joyauto1 -RunbookName test1
$jobs = $jobs[1..($jobs.Length-1)]
if (($jobs.status -contains "Running") -Or ($jobs.Status -eq "New"))
{   
    Write-Output "Runbook execution is stopped [$runbook] - there is another job currently running."
    exit 1
} 
else
{
    Write-Output "Proceed with runbook execution [$runbook]  - there are no interfering jobs running."
}

enter image description here

以上是关于Azure Runbook检查状态的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 自动化 Runbook 中安装和导入 Python 包

在 Azure Runbook 上运行“mysqldump”

我是否必须在powershell Runbook(azure)中导入模块?

如何将参数发送到 Azure Runbook api

新版Azure Automation Account 浅析 --- 用Runbook管理AAD Application Key

使用 Webhook“参数列表中缺少参数”触发 Azure 自动化 Runbook 失败