Ö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 , Never Always |
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 , Never Always |
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.
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:
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:
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.
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.
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:
- 22. satırdan öğesini kaldırın
$AzureContext = (Connect-AzAccount -Identity).context
. - değerini ve ile
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
değiştirin - İ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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin