Azure Статус проверки Runbook - PullRequest
0 голосов
/ 04 марта 2020

может у кого-то была эта проблема раньше? Существует Azure Runbook автоматизации, которая запускает скрипт 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
}

1 Ответ

0 голосов
/ 05 марта 2020

Когда вы запустите задание, оно получит себя как задание Running с помощью команды Get-AzAutomationJob, добавит Write-Output $jobs в ваш скрипт, см. Скриншот ниже, обратите внимание на Id и JobId это то же самое.

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 [] - there is another job currently running."
    exit 1
} 
else
{
    Write-Output "Proceed with runbook execution []  - there are no interfering jobs running."
}

enter image description here

...