Sdílet prostřednictvím


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, NeverAlways
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, NeverAlways
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 .

Výběr skriptů

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:

Vybrané položky

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:

Aktualizace výsledků

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.

Výsledky spuštění nasazení

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 .

Seznam galerie

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:

  1. Z řádku 22 odeberte $AzureContext = (Connect-AzAccount -Identity).context,
  2. Nahraďte ho a $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
  3. 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.