Aracılığıyla paylaş


Ön betikleri ve son betikleri yönetme

Önceki betikler ve sonraki betikler, Azure Otomasyonu hesabınızda güncelleştirme dağıtımının öncesinde (görev öncesi) ve sonrasında (görev sonrası) çalıştırılan runbook'lardır. Önceki betikler ve sonraki betikler yerel olarak değil Azure bağlamında çalıştırılır. Önceki betikler güncelleştirme dağıtımının başında çalıştırılır. Windows'da sonraki betikler dağıtımın sonunda ve yapılandırılmış tüm yeniden başlatmalardan sonra çalıştırılır. Linux'ta, sonraki betikler makinenin yeniden başlatılmasından sonra değil dağıtımın bitişinden sonra çalıştırılır.

Önceki betik ve sonraki betik gereksinimleri

Bir runbook'un betik öncesi veya betik sonrası olarak kullanılabilmesi için, bunu Otomasyon hesabınıza içeri aktarmanız ve runbook'u yayımlamanız gerekir.

Şu anda Yalnızca PowerShell 5.1 ve Python 2 runbook'ları Ön/Son betik olarak desteklenmektedir. Python 3, Grafik, PowerShell İş Akışı, Grafik PowerShell İş Akışı gibi diğer runbook türleri şu anda Ön/Son betik olarak desteklenmiyor.

Betik öncesi ve betik sonrası parametreleri

Ön betikleri ve son betikleri yapılandırırken, aynı runbook'u zamanlarken olduğu gibi parametreleri geçirebilirsiniz. Parametreler, güncelleştirme dağıtımı oluşturma sırasında tanımlanır. Ön betikler ve son betikler aşağıdaki türleri destekler:

  • [char]
  • [bayt]
  • [int]
  • [uzun]
  • [ondalık]
  • [single]
  • [çift]
  • [DateTime]
  • [dize]

Betik öncesi ve betik sonrası runbook parametreleri boole, nesne veya dizi türlerini desteklemez. Bu değerler runbook'ların başarısız olmasına neden olur.

Başka bir nesne türüne ihtiyacınız varsa, runbook'ta kendi mantığınızla bunu başka bir türe dönüştürebilirsiniz.

Standart runbook parametrelerinize ek olarak parametresi SoftwareUpdateConfigurationRunContext (JSON dizesi türü) sağlanır. Parametresini betik öncesi veya betik sonrası runbook'unuzda tanımlarsanız, güncelleştirme dağıtımı tarafından otomatik olarak geçirilir. parametresi, SoftwareUpdateconfigurations API'sinin döndürdiği bilgilerin bir alt kümesi olan güncelleştirme dağıtımı hakkındaki bilgileri içerir. Aşağıdaki bölümler ilişkili özellikleri tanımlar.

SoftwareUpdateConfigurationRunContext özellikleri

Özellik Tür Tanım
SoftwareUpdateConfigurationName String Yazılım güncelleştirme yapılandırmasının adı.
SoftwareUpdateConfigurationRunId GUID Çalıştırmanın benzersiz kimliği.
SoftwareUpdateConfiguration Ayarlar Yazılım güncelleştirme yapılandırmasıyla ilgili özellikler koleksiyonu.
SoftwareUpdateConfiguration Ayarlar. Operatingsystem Int Güncelleştirme dağıtımı için hedeflenen işletim sistemleri. 1 = Windows ve 2 = Linux
SoftwareUpdateConfiguration Ayarlar. Süre Zaman aralığı (SS:DD:SS) Güncelleştirme dağıtımının en uzun süresi, bakım penceresi olarak PT[n]H[n]M[n]S da adlandırılan ISO8601 göre çalışır.
Örnek: 02:00:00
SoftwareUpdateConfiguration Ayarlar. WindowsConfiguration Windows bilgisayarlarla ilgili özellikler koleksiyonu.
SoftwareUpdateConfiguration Ayarlar. WindowsConfiguration.excludedKbNumbers String Güncelleştirme dağıtımının dışında tutulan KB'lerin boşlukla ayrılmış listesi.
SoftwareUpdateConfiguration Ayarlar. WindowsConfiguration.includedKbNumbers String Güncelleştirme dağıtımına dahil edilen KB'lerin boşlukla ayrılmış listesi.
SoftwareUpdateConfiguration Ayarlar. WindowsConfiguration.UpdateCategories Tamsayı 1 = "Kritik";
2 = "Güvenlik"
4 = "UpdateRollUp"
8 = "FeaturePack"
16 = "ServicePack"
32 = "Tanım"
64 = "Araçlar"
128 = "Güncelleştirmeler"
SoftwareUpdateConfiguration Ayarlar. WindowsConfiguration.rebootSetting String Güncelleştirme dağıtımı için ayarları yeniden başlatın. Değerler , IfRequired, NeverAlways
SoftwareUpdateConfiguration Ayarlar. LinuxConfiguration Linux bilgisayarlarla ilgili özellikler koleksiyonu.
SoftwareUpdateConfiguration Ayarlar. LinuxConfiguration.IncludedPackageClassifications Tamsayı 0 = "Sınıflandırılmamış"
1 = "Kritik"
2 = "Güvenlik"
4 = "Diğer"
SoftwareUpdateConfiguration Ayarlar. LinuxConfiguration.IncludedPackageNameMasks String Güncelleştirme dağıtımına dahil edilen paket adlarının boşlukla ayrılmış listesi.
SoftwareUpdateConfiguration Ayarlar. LinuxConfiguration.ExcludedPackageNameMasks String Güncelleştirme dağıtımının dışında tutulan paket adlarının boşlukla ayrılmış listesi.
SoftwareUpdateConfiguration Ayarlar. LinuxConfiguration.RebootSetting String Güncelleştirme dağıtımı için ayarları yeniden başlatın. Değerler , IfRequired, NeverAlways
SoftwareUpdateConfiguation Ayarlar. AzureVirtualMachines Dize dizisi Güncelleştirme dağıtımındaki Azure VM'lerinin resourceId'lerinin listesi.
SoftwareUpdateConfiguration Ayarlar. NonAzureComputerNames Dize dizisi Güncelleştirme dağıtımındaki Azure dışı bilgisayarların FQDN'lerinin listesi.

Aşağıdaki örnek, Linux bilgisayar için SoftwareUpdateConfiguration Ayarlar özelliklerine geçirilen bir JSON dizesidir:

"SoftwareUpdateConfigurationSettings": {
     "OperatingSystem": 2,
     "WindowsConfiguration": null,
     "LinuxConfiguration": {
         "IncludedPackageClassifications": 7,
         "ExcludedPackageNameMasks": "fgh xyz",
         "IncludedPackageNameMasks": "abc bin*",
         "RebootSetting": "IfRequired"
     },
     "Targets": {
         "azureQueries": null,
         "nonAzureQueries": ""
     },
     "NonAzureComputerNames": [
        "box1.contoso.com",
        "box2.contoso.com"
     ],
     "AzureVirtualMachines": [
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/vm-01"
     ],
     "Duration": "02:00:00",
     "PSComputerName": "localhost",
     "PSShowComputerName": true,
     "PSSourceJobInstanceId": "2477a37b-5262-4f4f-b636-3a70152901e9"
 }

Aşağıdaki örnek, bir Windows bilgisayarının SoftwareUpdateConfiguration Ayarlar özelliklerine geçirilen bir JSON dizesidir:

"SoftwareUpdateConfigurationRunContext": {
    "SoftwareUpdateConfigurationName": "sampleConfiguration",
    "SoftwareUpdateConfigurationRunId": "00000000-0000-0000-0000-000000000000",
    "SoftwareUpdateConfigurationSettings": {
      "operatingSystem": "Windows",
      "duration": "02:00:00",
      "windows": {
        "excludedKbNumbers": [
          "168934",
          "168973"
        ],
        "includedUpdateClassifications": "Critical",
        "rebootSetting": "IfRequired"
      },
      "azureVirtualMachines": [
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-01",
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-02",
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-03"
      ],
      "nonAzureComputerNames": [
        "box1.contoso.com",
        "box2.contoso.com"
      ]
    }
  }

Tüm özelliklere sahip tam bir örnek şu konumda bulunabilir: Yazılım güncelleştirme yapılandırmasını ada göre alma.

Dekont

Nesne, SoftwareUpdateConfigurationRunContext makineler için yinelenen girdiler içerebilir. Bu, ön betiklerin ve son betiklerin aynı makinede birden çok kez çalışmasına neden olabilir. Bu davranışa geçici bir çözüm olarak yalnızca benzersiz VM adlarını seçmek için kullanın Sort-Object -Unique .

Dağıtımda ön betik veya son betik kullanma

Güncelleştirme dağıtımında ön betik veya son betik kullanmak için, bir güncelleştirme dağıtımı oluşturarak başlayın. Ön betikler + Son Betikler'i seçin. Bu eylem Ön betikleri seç + Son betikler sayfasını açar.

Select scripts

Kullanmak istediğiniz betiği seçin. Bu örnekte UpdateManagement-TurnOnVms runbook'unu kullanacağız. Runbook'u seçtiğinizde Betiği Yapılandır sayfası açılır. Ön Betik'i ve ardından Tamam'ı seçin.

UpdateManagement-TurnOffVms betiği için bu işlemi yineleyin. Ancak Betik türünü seçtiğinizde, Betik Sonrası'nı seçin.

Seçili öğeler bölümünde artık her iki betik de seçili olarak gösterilir. Biri ön betik, diğeri ise son betiktir:

Selected items

Güncelleştirme dağıtımınızı yapılandırmayı tamamlayın.

Güncelleştirme dağıtımınız tamamlandığında, sonuçları görüntülemek için Dağıtımları güncelleştirme bölümüne gidebilirsiniz. Gördüğünüz gibi, durum ön betik ve betik sonrası için sağlanır:

Update results

Güncelleştirme dağıtım çalıştırmasını seçerek ön betikler ve son betikler hakkında ek ayrıntılar gösterilir. Çalıştırma sırasında betik kaynağına bir bağlantı sağlanır.

Deployment run results

Dağıtımı durdurma

Bir ön betiği temel alan bir dağıtımı durdurmak istiyorsanız, bir özel durum oluşturmanız gerekir. Aksi takdirde dağıtım ve sonraki betik çalışmaya devam eder. Aşağıdaki kod parçacığında PowerShell kullanarak özel durum oluşturma gösterilmektedir.

#In this case, we want to terminate the patch job if any run fails.
#This logic might not hold for all cases - you might want to allow success as long as at least 1 run succeeds
foreach($summary in $finalStatus)
{
    if ($summary.Type -eq "Error")
    {
        #We must throw in order to fail the patch deployment.
        throw $summary.Summary
    }
}

Python 2'de özel durum işleme bir deneme bloğunda yönetilir.

Makinelerle etkileşim kurma

Önceki betikler ve sonraki betikler, doğrudan dağıtımınızdaki makinelerde değil Otomasyon hesabınızda runbook olarak çalıştırılır. Önceki görevler ve sonraki görevler de Azure bağlamında çalıştırılır ve Azure dışındaki makinelere erişimi yoktur. Aşağıdaki bölümlerde, ister Azure VM'leri ister Azure dışı makineler olsun, makinelerle doğrudan nasıl etkileşim kurabileceğiniz gösterilmektedir.

Azure makineleriyle etkileşim kurma

Ön görevler ve son görevler runbook olarak çalıştırılır ve dağıtımınızdaki Azure VM'lerinizde yerel olarak çalıştırılamaz. Azure VM'lerinizle etkileşime geçmek için aşağıdaki öğelere sahip olmanız gerekir:

  • Yönetilen kimlik veya Farklı Çalıştır hesabı
  • Çalıştırmak istediğiniz bir runbook

Azure makineleriyle etkileşime geçmek için Invoke-AzVMRunCommand cmdlet'ini kullanarak Azure VM'lerinizle etkileşim kurmanız gerekir. Bunun nasıl yapıldığını gösteren bir örnek için Güncelleştirme Yönetimi - Çalıştır komutuyla betiği çalıştırma runbook örneğine bakın.

Azure olmayan makinelerle etkileşim kurma

Ön görevler ve son görevler Azure bağlamında çalıştırılır ve Azure dışı makinelere erişimi yoktur. Azure dışındaki makinelerle etkileşime geçmek için aşağıdaki öğelere sahip olmanız gerekir:

  • Yönetilen kimlik veya Farklı Çalıştır hesabı
  • Makinede yüklü Karma Runbook Çalışanı
  • Yerel olarak çalıştırmak istediğiniz bir runbook
  • Üst runbook

Azure dışındaki makinelerle etkileşime geçmek için Azure bağlamında bir üst runbook çalıştırılır. Bu runbook, Start-AzAutomationRunbook cmdlet'iyle bir alt runbook çağırır. Betiğin üzerinde çalışması için parametresini RunOn belirtmeniz ve Karma Runbook Çalışanı'nın adını sağlamanız gerekir. Güncelleştirme Yönetimi - betiği yerel olarak çalıştırma runbook örneğine bakın.

Yama dağıtımını durdurma

Ön betiğiniz bir hata döndürürse dağıtımınızı durdurmak isteyebilirsiniz. Bunu yapmak için, hata oluşturacak herhangi bir mantık için betiğinizde bir hata oluşturmanız gerekir.

if (<My custom error logic>)
{
    #Throw an error to fail the patch deployment.
    throw "There was an error, abort deployment"
}

Python 2'de, belirli bir koşul oluştuğunda hata vermek istiyorsanız raise deyimini kullanın.

If (<My custom error logic>)
   raise Exception('Something happened.')

Örnekler

Ön betikler ve son betik örnekleri Azure Otomasyonu GitHub kuruluşunda ve PowerShell Galerisi bulunabilir veya bunları Azure portalından içeri aktarabilirsiniz. Bunu yapmak için Otomasyon hesabınızdaki İşlem Otomasyonu bölümünde Runbook'lar Galerisi'ne tıklayın. Filtre için Güncelleştirme Yönetimi'ni kullanın.

Gallery list

Alternatif olarak, aşağıdaki listede gösterildiği gibi bunları betik adlarına göre de arayabilirsiniz:

  • Güncelleştirme Yönetimi - VM'leri Açma
  • Güncelleştirme Yönetimi - VM'leri Kapatma
  • Güncelleştirme Yönetimi - Betiği Yerel Olarak Çalıştırma
  • Güncelleştirme Yönetimi - Ön/Son Betik şablonu
  • Güncelleştirme Yönetimi - Komut Çalıştır komutuyla betik çalıştırma

Önemli

Runbook'ları içeri aktardıktan sonra, kullanılmadan önce yayımlamanız gerekir. Bunu yapmak için Otomasyon hesabınızda runbook'u bulun, Düzenle'yi ve ardından Yayımla'yı seçin.

Örneklerin tümü aşağıdaki örnekte tanımlanan temel şablonu temel alır. Bu şablon, ön betikler ve son betiklerle kullanmak üzere kendi runbook'unuzu oluşturmak için kullanılabilir. Azure'da kimlik doğrulaması ve parametresini işleme için SoftwareUpdateConfigurationRunContext gerekli mantık eklenmiştir.

<#
.SYNOPSIS
 Barebones script for Update Management Pre/Post

.DESCRIPTION
  This script is intended to be run as a part of Update Management pre/post-scripts.
  It requires the Automation account's system-assigned managed identity.

.PARAMETER SoftwareUpdateConfigurationRunContext
  This is a system variable which is automatically passed in by Update Management during a deployment.
#>

param(
    [string]$SoftwareUpdateConfigurationRunContext
)

#region BoilerplateAuthentication
# 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
#endregion BoilerplateAuthentication

#If you wish to use the run context, it must be converted from JSON
$context = ConvertFrom-Json $SoftwareUpdateConfigurationRunContext
#Access the properties of the SoftwareUpdateConfigurationRunContext
$vmIds = $context.SoftwareUpdateConfigurationSettings.AzureVirtualMachines | Sort-Object -Unique
$runId = $context.SoftwareUpdateConfigurationRunId

Write-Output $context

#Example: How to create and write to a variable using the pre-script:
<#
#Create variable named after this run so it can be retrieved
New-AzAutomationVariable -ResourceGroupName $ResourceGroup -AutomationAccountName $AutomationAccount -Name $runId -Value "" -Encrypted $false
#Set value of variable
Set-AutomationVariable -Name $runId -Value $vmIds
#>

#Example: How to retrieve information from a variable set during the pre-script
<#
$variable = Get-AutomationVariable -Name $runId
#>

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. 22. 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

Grafik olmayan PowerShell runbook'ları Add-AzAccount için ve Add-AzureRMAccount Bağlan-AzAccount için diğer adlardır. Bu cmdlet'leri kullanabilir veya Otomasyon hesabınızdaki modüllerinizi en son sürümlere güncelleştirebilirsiniz. Yeni bir Otomasyon hesabı oluşturmuş olsanız bile modüllerinizi güncelleştirmeniz gerekebilir.

Sonraki adımlar

Güncelleştirme yönetiminin ayrıntıları için bkz . VM'leriniz için güncelleştirmeleri ve düzeltme eklerini yönetme.