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
,请参见下面的屏幕截图,注意Id
和JobId
一样。
要解决此问题,您可以使用$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."
}
以上是关于Azure Runbook检查状态的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure 自动化 Runbook 中安装和导入 Python 包
在 Azure Runbook 上运行“mysqldump”
我是否必须在powershell Runbook(azure)中导入模块?
新版Azure Automation Account 浅析 --- 用Runbook管理AAD Application Key