Správa předzálohovacích a pozálohovacích skriptů
Důležité
Služba Automation Update Management se 31. srpna 2024 vyřadila z provozu a doporučujeme používat Azure Update Manager. Postupujte podle pokynů pro migraci ze služby Automation Update Management do Azure Update Manageru.
Skripty před nasazením a po nasazení jsou runbooky, které se spouští v účtu Azure Automation před (úloha před) nasazením aktualizace a po (úloha po) nasazení aktualizace. Skripty před nasazením a po nasazení se spouští v kontextu Azure, a ne místně. Skripty před nasazením se spouští na začátku nasazení aktualizace. Ve Windows se skripty po nasazení spouští na konci nasazení a po dokončení všech nakonfigurovaných restartování. V Linuxu se skripty po nasazení spouští po dokončení nasazení, a ne po restartování počítače.
Požadavky na skripty před nasazením a po nasazení
Aby se sada Runbook používala jako předzálohovací nebo pozálohovací skript, musíte ho naimportovat do svého účtu Automation a publikovat runbook.
V současné době se jako předzálohovací skripty podporují jenom runbooky PowerShellu 5.1 a Python 2. Jiné typy runbooků, jako jsou Python 3, Grafické, Pracovní postup PowerShellu, Grafické pracovní postupy PowerShellu, se v současné době nepodporují jako předzálohovací skripty.
Parametry před skriptem a po skriptu
Při konfiguraci předzálohovacích skriptů a po skriptů můžete předávat parametry stejně jako plánování runbooku. Parametry jsou definovány v době vytváření nasazení aktualizace. Předzálohovací skripty a následné skripty podporují následující typy:
- [char]
- [bajt]
- [int]
- [long]
- [desetinné místo]
- [jeden]
- [double]
- [DateTime]
- [řetězec]
Parametry runbooku před skriptem a po skriptu nepodporují logické typy, objekty ani pole. Tyto hodnoty způsobují selhání runbooků.
Pokud potřebujete jiný typ objektu, můžete ho přetypovat na jiný typ s vlastní logikou v runbooku.
Kromě standardních parametrů runbooku SoftwareUpdateConfigurationRunContext
je k dispozici parametr (typ řetězce JSON). Pokud definujete parametr v předzálohovacím nebo post-script runbooku, bude automaticky předán nasazením aktualizace. Parametr obsahuje informace o nasazení aktualizace, což je podmnožina informací vrácených rozhraním API SoftwareUpdateconfigurations. Níže uvedené oddíly definují přidružené vlastnosti.
Vlastnosti SoftwareUpdateConfigurationRunContext
Vlastnost | Type | Popis |
---|---|---|
SoftwareUpdateConfigurationName | String | Název konfigurace aktualizace softwaru. |
SoftwareUpdateConfigurationRunId | Identifikátor GUID | Jedinečné ID spuštění. |
SoftwareUpdateConfigurationSettings | Kolekce vlastností souvisejících s konfigurací aktualizace softwaru. | |
SoftwareUpdateConfigurationSettings.OperatingSystem | Int | Operační systémy cílené na nasazení aktualizací.
1 = Windows a 2 = Linux |
SoftwareUpdateConfigurationSettings.Duration | Časový rozsah (HH:MM:SS) | Maximální doba trvání nasazení aktualizace se spustí podle PT[n]H[n]M[n]S ISO8601; označuje se také jako časové období údržby.Příklad: 02:00:00 |
SoftwareUpdateConfigurationSettings.WindowsConfiguration | Kolekce vlastností souvisejících s počítači s Windows. | |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.excludedKbNumbers | String | Seznam databází oddělených mezerami, které jsou vyloučené z nasazení aktualizace. |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.includedKbNumbers | String | Seznam databází oddělených mezerami, které jsou součástí nasazení aktualizace. |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.UpdateCategories | Celé číslo | 1 = "Kritické"; 2 = "Zabezpečení" 4 = "UpdateRollUp" 8 = "FeaturePack" 16 = "ServicePack" 32 = "Definice" 64 = "Nástroje" 128 = "Aktualizace" |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.rebootSetting | String | Restartujte nastavení nasazení aktualizace. Hodnoty jsou IfRequired , Never Always |
SoftwareUpdateConfigurationSettings.LinuxConfiguration | Kolekce vlastností souvisejících s počítači s Linuxem. | |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.IncludedPackageClassifications | Celé číslo | 0 = "Neotříděné" 1 = "Kritické" 2 = "Zabezpečení" 4 = "Jiné" |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.IncludedPackageNameMasks | String | Seznam názvů balíčků oddělených mezerami, které jsou součástí nasazení aktualizace. |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.ExcludedPackageNameMasks | String | Seznam názvů balíčků oddělených mezerami, které jsou vyloučené z nasazení aktualizace. |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.RebootSetting | String | Restartujte nastavení nasazení aktualizace. Hodnoty jsou IfRequired , Never Always |
SoftwareUpdateConfigurationSettings.AzureVirtualMachines | Pole řetězců | Seznam ID prostředků pro virtuální počítače Azure v nasazení aktualizací |
SoftwareUpdateConfigurationSettings.NonAzureComputerNames | Pole řetězců | Seznam plně kvalifikovaných názvů domén počítačů mimo Azure v nasazení aktualizací. |
Následující příklad je řetězec JSON předaný vlastnosti SoftwareUpdateConfigurationSettings pro počítač s Linuxem:
"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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/vm-01"
],
"Duration": "02:00:00",
"PSComputerName": "localhost",
"PSShowComputerName": true,
"PSSourceJobInstanceId": "2477a37b-5262-4f4f-b636-3a70152901e9"
}
Následující příklad je řetězec JSON předaný vlastnosti SoftwareUpdateConfigurationSettings pro počítač s Windows:
"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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-01",
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-02",
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-03"
],
"nonAzureComputerNames": [
"box1.contoso.com",
"box2.contoso.com"
]
}
}
Úplný příklad se všemi vlastnostmi najdete v tématu: Získání konfigurace aktualizace softwaru podle názvu.
Poznámka:
Objekt SoftwareUpdateConfigurationRunContext
může obsahovat duplicitní položky pro počítače. To může způsobit, že se na stejném počítači spustí vícekrát předzálohovací skripty a následné skripty. Chcete-li toto chování obejít, použijte Sort-Object -Unique
k výběru pouze jedinečných názvů virtuálních počítačů.
Použití předběžného skriptu nebo po skriptu v nasazení
Pokud chcete použít předzálohovací nebo pozálohovací skript v nasazení aktualizace, začněte vytvořením nasazení aktualizace. Vyberte Předzálohovací skripty + Post-Scripts. Tato akce otevře stránku Vybrat předzálohovací a post-scripts .
Vyberte skript, který chcete použít. V tomto příkladu používáme runbook UpdateManagement-TurnOnVms . Když vyberete runbook, otevře se stránka Konfigurovat skript . Vyberte Předzálohovací skript a pak vyberte OK.
Tento postup opakujte pro skript UpdateManagement-TurnOffVms . Ale když zvolíte typ skriptu, vyberte Post-Script.
Oddíl Vybrané položky teď zobrazuje oba vaše skripty vybrané. Jeden je předzálohovací skript a druhý je post-script:
Dokončete konfiguraci nasazení aktualizací.
Po dokončení nasazení aktualizací můžete přejít do části Nasazení aktualizací a zobrazit výsledky. Jak vidíte, stav je k dispozici pro předzálohovací a pozálohovací skript:
Výběrem spuštění nasazení aktualizace se zobrazí další podrobnosti o předzálohovaných skriptech a po skriptech. V době spuštění je k dispozici odkaz na zdroj skriptu.
Zastavení nasazení
Pokud chcete zastavit nasazení na základě předběžného skriptu, musíte vyvolat výjimku. Pokud to neuděláte, nasazení a skript po nasazení se spustí. Následující fragment kódu ukazuje, jak vyvolat výjimku pomocí PowerShellu.
#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
}
}
V Pythonu 2 se zpracování výjimek spravuje v bloku try .
Interakce s počítači
Skripty před nasazením a po nasazení se spouští jako runbooky ve vašem účtu Automation, a ne přímo na počítačích v rámci nasazení. Úlohy před nasazením a po nasazení se také spouští v kontextu Azure a nemají přístup k počítačům mimo Azure. Následující části ukazují, jak můžete s počítači pracovat přímo, ať už jde o virtuální počítače Azure nebo počítače mimo Azure.
Interakce s počítači Azure
Předběžné úlohy a následné úlohy se spouštějí jako runbooky a neběží nativně na virtuálních počítačích Azure ve vašem nasazení. K interakci s virtuálními počítači Azure musíte mít následující položky:
- Spravovaná identita nebo účet Spustit jako
- Runbook, který chcete spustit
Pokud chcete pracovat s počítači Azure, měli byste k interakci s virtuálními počítači Azure použít rutinu Invoke-AzVMRunCommand . Příklad toho, jak to udělat, najdete v ukázkovém řešení Update Management sady Runbook – spuštění skriptu pomocí příkazu Spustit.
Interakce s počítači mimo Azure
Předběžné úlohy a následné úkoly se spouštějí v kontextu Azure a nemají přístup k počítačům mimo Azure. K interakci s počítači mimo Azure musíte mít následující položky:
- Spravovaná identita nebo účet Spustit jako
- Funkce Hybrid Runbook Worker nainstalovaná na počítači
- Runbook, který chcete spustit místně
- Nadřazený runbook
Za účelem interakce s počítači mimo Azure se nadřazený runbok spouští v kontextu Azure. Tento runbook pomocí rutiny Start-AzAutomationRunbook volá podřízený runbook. Je nutné zadat RunOn
parametr a zadat název Hybrid Runbook Worker, ve kterém se má skript spustit. Prohlédni si ukázkový runbook Update Management – místní spuštění skriptu.
Přerušení nasazování opravy
Pokud předzálohovací skript vrátí chybu, možná budete chtít nasazení přerušit. K tomu musíte ve skriptu vyvolat chybu pro libovolnou logiku, která by představovala selhání.
if (<My custom error logic>)
{
#Throw an error to fail the patch deployment.
throw "There was an error, abort deployment"
}
Pokud chcete v Pythonu 2 vyvolat chybu, když dojde k určité podmínce, použijte příkaz raise .
If (<My custom error logic>)
raise Exception('Something happened.')
Ukázky
Ukázky pro předzálohovací skripty a následné skripty najdete v organizaci Azure Automation na GitHubu a v Galerie prostředí PowerShell nebo je můžete importovat prostřednictvím webu Azure Portal. Uděláte to tak, že v účtu Automation v části Automatizace procesů vyberete Galerii runbooků. Pro filtr použijte Update Management .
Nebo je můžete vyhledat podle názvu skriptu, jak je znázorněno v následujícím seznamu:
- Update Management – Zapnutí virtuálních počítačů
- Update Management – Vypnutí virtuálních počítačů
- Update Management – Místní spuštění skriptu
- Update Management – šablona pro předzálohovací a pozálohovací skripty
- Update Management – Spuštění skriptu pomocí příkazu Spustit
Důležité
Po importu runbooků je nutné je publikovat, než je budete moct použít. Uděláte to tak, že v účtu Automation najdete runbook, vyberete Upravit a pak vyberete Publikovat.
Všechny ukázky jsou založené na základní šabloně definované v následujícím příkladu. Tuto šablonu můžete použít k vytvoření vlastního runbooku pro použití s předzálohovacími skripty a po skripty. Součástí je nezbytná logika pro ověřování v Azure a zpracování parametru SoftwareUpdateConfigurationRunContext
.
<#
.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
#>
Pokud chcete, aby runbook běžel se spravovanou identitou přiřazenou systémem, nechejte kód tak, jak je. Pokud chcete použít spravovanou identitu přiřazenou uživatelem, pak:
- Z řádku 22 odeberte
$AzureContext = (Connect-AzAccount -Identity).context
, - Nahraďte ho a
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
- Zadejte ID klienta.
Poznámka:
Pro jiné než grafické runbooky Add-AzAccount
PowerShellu a Add-AzureRMAccount
jsou aliasy pro Connect-AzAccount. Tyto rutiny můžete použít nebo můžete moduly v účtu Automation aktualizovat na nejnovější verze. Možná budete muset aktualizovat moduly, i když jste právě vytvořili nový účet Automation.
Další kroky
Podrobnosti o správě aktualizací najdete v tématu Správa aktualizací a oprav pro vaše virtuální počítače.