Share via


Azure Otomasyonu'de runbook'ları yönetme

Yeni bir tane oluşturarak veya var olan bir runbook'u bir dosyadan veya Runbook Galerisi'nden içeri aktararak Azure Otomasyonu bir runbook ekleyebilirsiniz. Bu makalede runbook'u yönetmeye yönelik bilgiler ve runbook tasarımıyla ilgili önerilen desenler ve en iyi yöntemler sağlanır. Topluluk runbook'larına ve modüllerine erişmenin tüm ayrıntılarını Azure Otomasyonu için Runbook ve modül galerilerinde bulabilirsiniz.

Runbook oluşturma

Azure portalını veya PowerShell'i kullanarak Azure Otomasyonu'de yeni bir runbook oluşturun. Runbook oluşturulduktan sonra, şu bilgileri kullanarak bu runbook'u düzenleyebilirsiniz:

Azure portalında runbook oluşturma

  1. Azure Portal oturum açın.
  2. Otomasyon Hesapları'nı arayın ve seçin.
  3. Otomasyon Hesapları sayfasında, listeden Otomasyon hesabınızı seçin.
  4. Otomasyon hesabında İşlem Otomasyonu'nun altındaki Runbook'lar'ı seçerek runbook listesini açın.
  5. Runbook oluştur'a tıklayın.
    1. Runbook'u adlandırın.
    2. Runbook türü açılan listesinden. Türünü seçin. Runbook adı bir harfle başlamalıdır ve harf, sayı, alt çizgi ve kısa çizgi içerebilir
    3. Çalışma zamanı sürümünü seçin
    4. Geçerli Açıklamayı girin
  6. Runbook oluşturmak için Oluştur’a tıklayın.

PowerShell ile runbook oluşturma

Boş bir runbook oluşturmak için New-AzAutomationRunbook cmdlet'ini kullanın. Type için tanımlanan runbook türlerinden birini belirtmek için New-AzAutomationRunbookparametresini kullanın.

Aşağıdaki örnekte yeni bir boş runbook'un nasıl oluşturulacağı gösterilmektedir.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'NewRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
}
New-AzAutomationRunbook @params

Runbook'u içeri aktarma

Kendi runbook'unuzu oluşturmak için bir PowerShell veya PowerShell İş Akışı (.ps1) betiği, grafik runbook (.graphrunbook) veya Python 2 veya Python 3 betiği (.py) içeri aktarabilirsiniz. aşağıdaki noktaları dikkate alarak içeri aktarma sırasında oluşturulan runbook türünü belirtirsiniz.

  • İş akışı içermeyen bir .ps1 dosyasını PowerShell runbook'unaveya PowerShell İş Akışı runbook'una aktarabilirsiniz. Bir PowerShell İş Akışı runbook'una aktarırsanız, iş akışına dönüştürülür. Bu durumda, yapılan değişiklikleri açıklamak için açıklamalar runbook'a eklenir.

  • PowerShell İş Akışı içeren bir .ps1 dosyasını PowerShell İş Akışı runbook'una aktarabilirsiniz. Dosyada birden çok PowerShell iş akışı varsa içeri aktarma işlemi başarısız olur. Her iş akışını kendi dosyasına kaydetmeniz ve her bir iş akışını ayrı olarak içeri aktarmanız gerekir.

  • PowerShell betik altyapısı bunu tanıyamadığından, PowerShell İş Akışı içeren bir .ps1 dosyasını PowerShell runbook'una aktarmayın.

  • Bir .graphrunbook dosyasını yalnızca yeni bir grafik runbook'a aktarabilirsiniz.

Azure portalından runbook'u içeri aktarma

Bir betik dosyasını Azure Otomasyonu içeri aktarmak için aşağıdaki yordamı kullanabilirsiniz.

Dekont

Portalı kullanarak bir .ps1 dosyasını yalnızca PowerShell İş Akışı runbook'una aktarabilirsiniz.

  1. Azure portal'da Otomasyon Hesapları'nı bulun ve seçin.
  2. Otomasyon Hesapları sayfasında, listeden Otomasyon hesabınızı seçin.
  3. Otomasyon hesabında İşlem Otomasyonu'nun altındaki Runbook'lar'ı seçerek runbook listesini açın.
  4. Runbook'u içeri aktar'a tıklayın. Aşağıdaki seçeneklerden birini belirleyebilirsiniz:
    1. Dosyaya gözat - yerel makinenizden bir dosya seçer.
    2. Galeri'den gözat - Galeriden mevcut bir runbook'a göz atabilir ve bu runbook'u seçebilirsiniz.
  5. Dosyayı seçin.
  6. Ad alanı etkinse runbook adını değiştirme seçeneğiniz vardır. Ad bir harfle başlamalıdır ve harf, sayı, alt çizgi ve kısa çizgi içerebilir.
  7. Runbook türü otomatik olarak doldurulur, ancak geçerli kısıtlamaları dikkate aldıktan sonra türü değiştirebilirsiniz.
  8. Çalışma zamanı sürümü otomatik olarak doldurulur veya açılan listeden sürümü seçin.
  9. İçe aktar'a tıklayın. Yeni runbook, Otomasyon hesabının runbook'lar listesinde görüntülenir.
  10. Çalıştırmadan önce runbook'u yayımlamanız gerekir.

Dekont

Grafik runbook'u içeri aktardıktan sonra başka bir türe dönüştürebilirsiniz. Ancak, grafik runbook'u metinsel runbook'a dönüştüremezsiniz.

PowerShell ile runbook'u içeri aktarma

Bir betik dosyasını taslak runbook olarak içeri aktarmak için Import-AzAutomationRunbook cmdlet'ini kullanın. Runbook zaten varsa, cmdlet'iyle parametresini Force kullanmadığınız sürece içeri aktarma işlemi başarısız olur.

Aşağıdaki örnek, bir betik dosyasının runbook'a nasıl aktarılacağını gösterir.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'Sample_TestRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
    Path                  = 'C:\Runbooks\Sample_TestRunbook.ps1'
}
Import-AzAutomationRunbook @params

Kaynakları işleme

Runbook'unuz bir kaynak oluşturuyorsa, betik kaynağı oluşturmaya çalışmadan önce kaynağın zaten var olup olmadığını denetlemelidir. İşte temel bir örnek.

$vmName = 'WindowsVM1'
$rgName = 'MyResourceGroup'
$myCred = Get-AutomationPSCredential 'MyCredential'

$vmExists = Get-AzResource -Name $vmName -ResourceGroupName $rgName
if (-not $vmExists) {
    Write-Output "VM $vmName does not exist, creating"
    New-AzVM -Name $vmName -ResourceGroupName $rgName -Credential $myCred
} else {
    Write-Output "VM $vmName already exists, skipping"
}

Etkinlik günlüğünden ayrıntıları alma

Otomasyon hesabının Etkinlik günlüğünden runbook'u başlatan kişi veya hesap gibi runbook ayrıntılarını alabilirsiniz. Aşağıdaki PowerShell örneği, belirtilen runbook'u çalıştıracak son kullanıcıyı sağlar.

$rgName = 'MyResourceGroup'
$accountName = 'MyAutomationAccount'
$runbookName = 'MyRunbook'
$startTime = (Get-Date).AddDays(-1)

$params = @{
    ResourceGroupName = $rgName
    StartTime         = $startTime
}
$JobActivityLogs = (Get-AzLog @params).Where( { $_.Authorization.Action -eq 'Microsoft.Automation/automationAccounts/jobs/write' })

$JobInfo = @{}
foreach ($log in $JobActivityLogs) {
    # Get job resource
    $JobResource = Get-AzResource -ResourceId $log.ResourceId

    if ($null -eq $JobInfo[$log.SubmissionTimestamp] -and $JobResource.Properties.Runbook.Name -eq $runbookName) {
        # Get runbook
        $jobParams = @{
            ResourceGroupName     = $rgName
            AutomationAccountName = $accountName
            Id                    = $JobResource.Properties.JobId
        }
        $Runbook = Get-AzAutomationJob @jobParams | Where-Object RunbookName -EQ $runbookName

        # Add job information to hashtable
        $JobInfo.Add($log.SubmissionTimestamp, @($Runbook.RunbookName, $Log.Caller, $JobResource.Properties.jobId))
    }
}
$JobInfo.GetEnumerator() | Sort-Object Key -Descending | Select-Object -First 1

İlerleme izleme

Runbook'larınızı kolayca yeniden kullanılabilen ve yeniden başlatabileceğiniz mantıkla modüler olacak şekilde yazmak iyi bir uygulamadır. Runbook'taki ilerleme durumunu izleme, sorun olduğunda runbook mantığının doğru şekilde yürütülmesini sağlar.

Depolama hesabı, veritabanı veya paylaşılan dosyalar gibi bir dış kaynak kullanarak runbook'un ilerleme durumunu izleyebilirsiniz. İlk olarak gerçekleştirilen son eylemin durumunu denetlemek için runbook'unuzda mantık oluşturun. Ardından, denetimin sonuçlarına bağlı olarak mantık runbook'taki belirli görevleri atlayabilir veya devam edebilir.

Eşzamanlı işleri engelleme

Bazı runbook'lar aynı anda birden çok işte çalıştırılırsa garip davranır. Bu durumda, runbook'un zaten çalışan bir iş olup olmadığını belirlemek için mantık uygulaması önemlidir. İşte temel bir örnek.

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity 
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context 
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

# Check for already running or new runbooks 
$runbookName = "runbookName" 
$resourceGroupName = "resourceGroupName" 
$automationAccountName = "automationAccountName"

$jobs = Get-AzAutomationJob -ResourceGroupName $resourceGroupName -AutomationAccountName $automationAccountName -RunbookName $runbookName -DefaultProfile $AzureContext

# Ranking all the active jobs
$activeJobs = $jobs | where {$_.status -eq 'Running' -or $_.status -eq 'Queued' -or $_.status -eq 'New' -or $_.status -eq 'Activating' -or $_.status -eq 'Resuming'} | Sort-Object -Property CreationTime 
$jobRanking = @() 
$rank = 0 
ForEach($activeJob in $activeJobs) 
{         
    $rank = $rank + 1 
    $activeJob | Add-Member -MemberType NoteProperty -Name jobRanking -Value $rank -Force 
    $jobRanking += $activeJob 
}
    
$AutomationJobId = $PSPrivateMetadata.JobId.Guid 
$currentJob = $activeJobs | where {$_.JobId -eq $AutomationJobId} 
$currentJobRank = $currentJob.jobRanking 

# Only allow the Job with Rank = 1 to start processing. 
If($currentJobRank -ne "1") 
{ 
    Write-Output "$(Get-Date -Format yyyy-MM-dd-hh-mm-ss.ffff) Concurrency check failed as Current Job Ranking is not 1 but $($currentJobRank) therefore exiting..." 
    Exit 
} Else
{
    Write-Output "$(Get-Date -Format yyyy-MM-dd-hh-mm-ss.ffff) Concurrency check passed. Start processing.." 
} 

Runbook'un sistem tarafından atanan yönetilen kimlikle yürütülmesini istiyorsanız, kodu olduğu gibi bırakın. Kullanıcı tarafından atanan bir yönetilen kimlik kullanmayı tercih ediyorsanız:

  1. 5. satırdan öğesini kaldırın $AzureContext = (Connect-AzAccount -Identity).context.
  2. değerini ve ile $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).contextdeğiştirin
  3. İstemci Kimliğini girin.

Dekont

PowerShell 7.2 karma işleri için 28. satırda değişiklik yapın. $PSPrivateMetadata.JobId.Guid öğesini $env:PSPrivateMetaData ile değiştirin.

Zamana bağlı betikteki geçici hataları işleme

Runbook'larınız, yeniden başlatılmasına veya başarısız olmasına neden olabilecek geçici hatalar da dahil olmak üzere güçlü ve hataları işleyebilir olmalıdır. Bir runbook başarısız olursa Azure Otomasyonu yeniden denenir.

Runbook'unuz normalde bir zaman kısıtlaması içinde çalışıyorsa betiğin yürütme süresini denetlemek için mantık uygulamasını sağlayın. Bu denetim yalnızca belirli zamanlarda başlatma, kapatma veya ölçeği genişletme gibi işlemlerin çalıştırılmasını sağlar.

Dekont

Azure korumalı alan işlemindeki yerel saat UTC olarak ayarlanır. Runbook'larınızdaki tarih ve saat hesaplamaları bu olguyu dikkate almalıdır.

Geçici hataları önlemek için runbook'a Yeniden deneme mantığı

Runbook'lar genellikle ARM, Azure Kaynak Grafı, SQL hizmetleri ve diğer web hizmetleri aracılığıyla Azure gibi uzak sistemlere çağrı yapar. Runbook'ların çağırdığı sistem meşgul olduğunda, geçici olarak kullanılamıyorsa veya yük altında azaltma uyguladığında, çağrılar çalışma zamanı hatalarına karşı savunmasızdır. Runbook'larda dayanıklılık oluşturmak için, runbook'ların başarısız olmadan geçici bir sorunu işleyebilmesi için çağrıları yaparken yeniden deneme mantığını uygulamanız gerekir.

Daha fazla bilgi için Bkz . Yeniden deneme düzeni ve Genel REST ve yeniden deneme yönergeleri.

Örnek 1: Runbook'unuz yalnızca bir veya iki çağrı yapıyorsa

$searchServiceURL = "https://$searchServiceName.search.windows.net"
$resource = Get-AzureRmResource -ResourceType "Microsoft.Search/searchServices" -ResourceGroupName $searchResourceGroupName -ResourceName  $searchServiceName -ApiVersion 2015-08-19
$searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey

çağrısı Invoke-AzureRmResourceActionyaptığınızda geçici hatalar gözlemleyebilirsiniz. Bu gibi bir senaryoda, cmdlet'ine yapılan çağrının etrafında aşağıdaki temel deseni uygulamanızı öneririz.

$searchServiceURL = "https://$searchServiceName.search.windows.net"
$resource = Get-AzureRmResource -ResourceType "Microsoft.Search/searchServices" -ResourceGroupName $searchResourceGroupName -ResourceName  $searchServiceName -ApiVersion 2015-08-19

    # Adding in a retry
    $Stoploop = $false
    $Retrycount = 0
 
    do {
        try   {
               $searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey
               write-verbose "Invoke-AzureRmResourceAction on $resource.ResourceId completed"
               $Stoploop = $true
              }
        catch {
               if ($Retrycount -gt 3)
                 {
                  Write-verbose "Could not Invoke-AzureRmResourceAction on $resource.ResourceId after 3 retrys."
                  $Stoploop = $true
                 }
               else  
                 {
                  Write-verbose "Could not Invoke-AzureRmResourceAction on $resource.ResourceId retrying in 30 seconds..."
                  Start-Sleep -Seconds 30
                  $Retrycount = $Retrycount + 1
                 }
               }
        }
    While ($Stoploop -eq $false)

Dekont

Aramayı yeniden deneme denemesi, her seferinde 30 saniye boyunca uyuyan üç kereye kadardır.

Örnek 2 : Runbook sık sık uzak çağrılar yapıyorsa

Runbook sık sık uzak çağrılar yapıyorsa geçici çalışma zamanı sorunlarıyla karşılaşabilir. Yapılan her çağrı için yeniden deneme mantığını uygulayan bir işlev oluşturun ve yürütülecek betik bloğu olarak yapılacak çağrıyı geçirin.

Function ResilientRemoteCall {

         param(
               $scriptblock
               )
        
         $Stoploop = $false
         $Retrycount = 0
 
         do {
             try   {
                    Invoke-Command -scriptblock $scriptblock 
                    write-verbose "Invoked $scriptblock completed"
                    $Stoploop = $true
                   }
             catch {
                    if ($Retrycount -gt 3)
                      {
                       Write-verbose "Invoked $scriptblock failed 3 times and we will not try again."
                       $Stoploop = $true
                      }
                    else  
                      {
                       Write-verbose "Invoked $scriptblock failed  retrying in 30 seconds..."
                       Start-Sleep -Seconds 30
                       $Retrycount = $Retrycount + 1
                      }
                    }
             }
         While ($Stoploop -eq $false)
}

Ardından her uzak çağrıyı işlevine şu şekilde geçirebilirsiniz:

ResilientRemoteCall { Get-AzVm }
veya

ResilientRemoteCall { $searchAPIKey = (Invoke-AzureRmResourceAction -Action listAdminKeys -ResourceId $resource.ResourceId -ApiVersion 2015-08-19 -Force).PrimaryKey}

Birden fazla abonelik ile çalışma

Runbook'unuzun aboneliklerle çalışabilmesi gerekir. Örneğin, runbook birden çok aboneliği işlemek için Disable-AzContextAutosave cmdlet'ini kullanır. Bu cmdlet, kimlik doğrulama bağlamını aynı korumalı alanda çalışan başka bir runbook'tan alınmamasını sağlar.

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription `
    -DefaultProfile $AzureContext

$childRunbookName = 'childRunbookDemo'
$resourceGroupName = "resourceGroupName"
$automationAccountName = "automationAccountName"

$startParams = @{
    ResourceGroupName     = $resourceGroupName
    AutomationAccountName = $automationAccountName
    Name                  = $childRunbookName
    DefaultProfile        = $AzureContext
}
Start-AzAutomationRunbook @startParams

Runbook'un sistem tarafından atanan yönetilen kimlikle yürütülmesini istiyorsanız, kodu olduğu gibi bırakın. Kullanıcı tarafından atanan bir yönetilen kimlik kullanmayı tercih ediyorsanız:

  1. 5. satırdan öğesini kaldırın $AzureContext = (Connect-AzAccount -Identity).context.
  2. değerini ve ile $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).contextdeğiştirin
  3. İstemci Kimliğini girin.

Özel betikle çalışma

Dekont

Log Analytics aracısının yüklü olduğu konakta normalde özel betikleri ve runbook'ları çalıştıramazsınız.

Özel betik kullanmak için:

  1. Otomasyon hesabı oluşturun.
  2. Karma Runbook Çalışanı rolünü dağıtın.
  3. Linux makinesindeyse yükseltilmiş ayrıcalıklara ihtiyacınız vardır. İmza denetimlerini kapatmak için oturum açın.

Bir runbook'u test etme

Bir runbook'u test ettiğinizde Taslak sürümü yürütülür ve gerçekleştirdiği tüm eylemler tamamlanır. İş geçmişi oluşturulmaz, ancak çıkış ve uyarı ile hata akışları Test çıktısıbölmesinde görüntülenir. Ayrıntılı akışa gönderilen iletiler Yalnızca VerbosePreference değişkeni olarak ayarlandıysa ContinueÇıkış bölmesinde görüntülenir.

Taslak sürümü çalıştırılmaya devam etse de runbook normal şekilde yürütülür ve ortamdaki kaynaklara karşı herhangi bir eylem gerçekleştirir. Bu nedenle runbook'ları yalnızca üretim dışı kaynaklarda test etmelisiniz.

Dekont

Tüm runbook yürütme eylemleri otomasyon hesabının Etkinlik Günlüğü'nde Azure Otomasyonu işi oluşturma işlemi adıyla günlüğe kaydedilir. Ancak runbook'un taslak sürümünün yürütüldüğü bir test bölmesindeki runbook yürütme işlemi, etkinlik günlüklerine Azure Otomasyonu runbook taslağı yazma işlemi adıyla kaydedilir. ile biten kapsamı görmek için İşlem ve JSON sekmesini seçin. /runbooks/(runbook name)/draft/testjob.

Her runbook türünü test etme yordamı aynıdır. Azure portal metin düzenleyici ile grafik düzenleyici arasında test etmede fark yoktur.

  1. Runbook'un Taslak sürümünü metin düzenleyicisinde veya grafik düzenleyicideaçın.
  2. Test sayfasını açmak için Test'etıklayın.
  3. Runbook'un parametreleri varsa bunlar sol bölmede listelenir ve burada test için kullanılacak değerleri sağlayabilirsiniz.
  4. Testi Karma Runbook Çalışanı üzerinde çalıştırmak istiyorsanız, Ayarlar Çalıştır'ı Karma Çalışanı olarak değiştirin ve hedef grubun adını seçin. Aksi takdirde, testi bulutta çalıştırmak için varsayılan Azure'ı koruyun.
  5. Testi başlatmak için Başlat'a tıklayın.
  6. PowerShell İş Akışı'nı veya grafik runbook'u test edilirken durdurmak veya askıya almak için Çıkış bölmesinin altındaki düğmeleri kullanabilirsiniz. Bir runbook'u askıya aldığınızda, askıya alınmadan önce geçerli etkinliği tamamlar. Runbook askıya alındığında, durdurabilir veya yeniden başlatabilirsiniz.
  7. Çıktı bölmesinde runbook'tan çıktıyı inceleyin.

Runbook yayımlama

Yeni bir runbook oluşturduğunuzda veya içeri aktardığınızda, çalıştırmadan önce yayımlamanız gerekir. Azure Otomasyonu'daki her runbook'un taslak sürümü ve Yayımlanmış sürümü vardır. Yalnızca Yayımlanan sürüm çalıştırılabilir ve yalnızca Taslak sürüm düzenlenebilir. Yayımlanan sürüm Taslak sürümdeki herhangi bir değişiklikten etkilenmez. Taslak sürümü kullanıma sunulduğunda, geçerli Yayımlanan sürümü Taslak sürümüyle üzerine yazarak yayımlarsınız.

Azure portalda runbook'u yayımlama

  1. Azure portal'da Otomasyon Hesapları'nı bulun ve seçin.
  2. Otomasyon Hesapları sayfasında, listeden Otomasyon hesabınızı seçin.
  3. Otomasyon hesabınızda runbook'u açın.
  4. Düzenle'yi tıklatın.
  5. Yayımla'ya tıklayın ve doğrulama iletisine yanıt olarak Evet'i seçin.

PowerShell kullanarak runbook yayımlama

Runbook'unuzu yayımlamak için Publish-AzAutomationRunbook cmdlet'ini kullanın.

$accountName = "MyAutomationAccount"
$runbookName = "Sample_TestRunbook"
$rgName = "MyResourceGroup"

$publishParams = @{
    AutomationAccountName = $accountName
    ResourceGroupName     = $rgName
    Name                  = $runbookName
}
Publish-AzAutomationRunbook @publishParams

Azure portalda runbook zamanlama

Runbook'unuz yayımlandığında, bunu işlem için zamanlayabilirsiniz:

  1. Azure portal'da Otomasyon Hesapları'nı bulun ve seçin.
  2. Otomasyon Hesapları sayfasında, listeden Otomasyon hesabınızı seçin.
  3. Runbook'lar listenizden runbook'u seçin.
  4. Kaynaklar'ın altında Zamanlamalar'ı seçin.
  5. Zamanlama ekle'yi seçin.
  6. Runbook'u Zamanla bölmesinde Runbook'unuza zamanlama bağla'yı seçin.
  7. Zamanlama bölmesinde Yeni zamanlama oluştur'u seçin.
  8. Yeni zamanlama bölmesine bir ad, açıklama ve diğer parametreleri girin.
  9. Zamanlama oluşturulduktan sonra, bunu vurgulayın ve Tamam'a tıklayın. Şimdi runbook'unuza bağlanmalıdır.
  10. Runbook durumunu size bildirmek için posta kutunuzda bir e-posta arayın.

Silinen runbook'u geri yükleme

Silinen bir runbook'u PowerShell betikleri aracılığıyla kurtarabilirsiniz. Runbook'u kurtarmak için aşağıdaki koşulların karşılandığından emin olun:

  • Geri yüklenecek runbook'lar son 29 gün içinde silindi.
  • Bu runbook için Otomasyon hesabı var.
  • Otomasyon hesabının Sistem tarafından atanan yönetilen kimliğine Otomasyon Katkıda Bulunanı rolü izni verilir.

PowerShell betiği

İş durumlarını alma

Azure portalında durumları görüntüleme

Azure Otomasyonu iş işleme ayrıntıları İşler'de sağlanır. Runbook işlerinizi görmeye hazır olduğunuzda Azure portalını kullanın ve Otomasyon hesabınıza erişin. Sağ tarafta, İş İstatistikleri'nde tüm runbook işlerinin özetini görebilirsiniz.

Job Statistics tile

Özet, yürütülen her iş için iş durumunun sayısını ve grafik gösterimini görüntüler.

Kutucuğa tıklanması, yürütülen tüm işlerin özetlenmiş listesini içeren İşler sayfasını gösterir. Bu sayfada her işin durumu, runbook adı, başlangıç zamanı ve tamamlanma zamanı gösterilir.

Screenshot of the Jobs page.

İşleri filtrele'yi seçerek listesini filtreleyebilirsiniz. Belirli bir runbook'u, iş durumunu veya açılan listeden bir seçimi filtreleyin ve arama için zaman aralığını sağlayın.

Filter job status

Alternatif olarak, Otomasyon hesabınızdaki Runbook'lar sayfasından bu runbook'u seçip İşler'i seçerek belirli bir runbook'un iş özeti ayrıntılarını görüntüleyebilirsiniz. Bu eylem İşler sayfasını sunar. Buradan bir iş kaydına tıklayarak ayrıntılarını ve çıktısını görüntüleyebilirsiniz.

Screenshot of the Jobs page with the Errors button highlighted.

PowerShell kullanarak iş durumlarını alma

Runbook için oluşturulan işleri ve belirli bir işin ayrıntılarını almak için Get-AzAutomationJob cmdlet'ini kullanın. kullanarak Start-AzAutomationRunbookbir runbook başlatırsanız, sonuçta elde edilen işi döndürür. İş çıktısını almak için Get-AzAutomationJobOutput kullanın.

Aşağıdaki örnek, örnek bir runbook için son işi alır ve durumunu, runbook parametreleri için sağlanan değerleri ve iş çıkışını görüntüler.

$getJobParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Runbookname           = 'Test-Runbook'
}
$job = (Get-AzAutomationJob @getJobParams | Sort-Object LastModifiedDate -Desc)[0]
$job | Select-Object JobId, Status, JobParameters

$getOutputParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Id                    = $job.JobId
    Stream                = 'Output'
}
Get-AzAutomationJobOutput @getOutputParams

Aşağıdaki örnek, belirli bir işin çıkışını alır ve her kaydı döndürür. Kayıtlardan biri için bir özel durum varsa, betik özel durumu değer yerine yazar. Özel durumlar çıkış sırasında normal olarak günlüğe kaydedilmeyecek ek bilgiler sağlayabildiği için bu davranış yararlıdır.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Stream                = 'Any'
}
$output = Get-AzAutomationJobOutput @params

foreach ($item in $output) {
    $jobOutParams = @{
        AutomationAccountName = 'MyAutomationAccount'
        ResourceGroupName     = 'MyResourceGroup'
        Id                    = $item.StreamRecordId
    }
    $fullRecord = Get-AzAutomationJobOutputRecord @jobOutParams

    if ($fullRecord.Type -eq 'Error') {
        $fullRecord.Value.Exception
    } else {
        $fullRecord.Value
    }
}

Sonraki adımlar