Sdílet prostřednictvím


Správa předzálohovacích a pozálohovacích skriptů

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 Typ Popis
SoftwareUpdateConfigurationName Řetězec Název konfigurace aktualizace softwaru.
SoftwareUpdateConfigurationRunId Identifikátor GUID Jedinečné ID spuštění.
SoftwareUpdateConfiguration Nastavení Kolekce vlastností souvisejících s konfigurací aktualizace softwaru.
SoftwareUpdateConfiguration Nastavení Operatingsystem Int Operační systémy cílené na nasazení aktualizací. 1 = Windows a 2 = Linux
SoftwareUpdateConfiguration Nastavení Doba trvání Č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
SoftwareUpdateConfiguration Nastavení WindowsConfiguration Kolekce vlastností souvisejících s počítači s Windows.
SoftwareUpdateConfiguration Nastavení WindowsConfiguration.excludedKbNumbers Řetězec Seznam databází oddělených mezerami, které jsou vyloučené z nasazení aktualizace.
SoftwareUpdateConfiguration Nastavení WindowsConfiguration.includedKbNumbers Řetězec Seznam databází oddělených mezerami, které jsou součástí nasazení aktualizace.
SoftwareUpdateConfiguration Nastavení WindowsConfiguration.UpdateCategories Integer 1 = "Kritické";
2 = "Zabezpečení"
4 = "UpdateRollUp"
8 = "FeaturePack"
16 = "ServicePack"
32 = "Definice"
64 = "Nástroje"
128 = "Aktualizace"
SoftwareUpdateConfiguration Nastavení WindowsConfiguration.rebootSetting Řetězec Restartujte nastavení nasazení aktualizace. Hodnoty jsou IfRequired, NeverAlways
SoftwareUpdateConfiguration Nastavení LinuxConfiguration Kolekce vlastností souvisejících s počítači s Linuxem.
SoftwareUpdateConfiguration Nastavení LinuxConfiguration.IncludedPackageClassifications Integer 0 = "Neotříděné"
1 = "Kritické"
2 = "Zabezpečení"
4 = "Jiné"
SoftwareUpdateConfiguration Nastavení LinuxConfiguration.IncludedPackageNameMasks Řetězec Seznam názvů balíčků oddělených mezerami, které jsou součástí nasazení aktualizace.
SoftwareUpdateConfiguration Nastavení LinuxConfiguration.ExcludedPackageNameMasks Řetězec Seznam názvů balíčků oddělených mezerami, které jsou vyloučené z nasazení aktualizace.
SoftwareUpdateConfiguration Nastavení LinuxConfiguration.RebootSetting Řetězec Restartujte nastavení nasazení aktualizace. Hodnoty jsou IfRequired, NeverAlways
SoftwareUpdateConfiguation Nastavení AzureVirtualMachines Pole řetězců Seznam ID prostředků pro virtuální počítače Azure v nasazení aktualizací
SoftwareUpdateConfiguration Nastavení 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ý Do SoftwareUpdateConfiguration Nastavení vlastnosti počítače 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/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"
 }

Následující příklad je řetězec JSON předaný vlastnosti SoftwareUpdateConfiguration Nastavení 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/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"
      ]
    }
  }

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

Select 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:

Selected items

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:

Update results

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.

Deployment run results

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 .

Gallery list

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 Připojení-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.