Előzetes és utólagos szkriptek kezelése
Fontos
Az Automation Update Management 2024. augusztus 31-én megszűnt, és javasoljuk, hogy az Azure Update Managert használja. Kövesse az Automation Update Managementből az Azure Update Managerbe való migrálásra vonatkozó irányelveket.
Az előzetesen és utólagosan futtatandó szkriptek olyan runbookok, amelyeket az Azure Automation-fiókban futtathat a frissítéstelepítés előtt (feladat előtti) és után (feladat utáni). Az előzetesen és utólagosan futtatandó szkriptek az Azure-környezetben futnak, nem helyben. Az előzetesen futtatandó szkriptek a frissítés üzembe helyezésének elején futnak. Windows rendszeren az utólagosan futtatandó szkriptek az üzembe helyezés végén és bármely konfigurált újraindítás után futnak. Linux esetében a szkriptek az üzembe helyezés befejezése után futnak, nem pedig a gép újraindítása után.
Előzetesen és utólagosan futtatandó szkriptekre vonatkozó követelmények
Ahhoz, hogy egy runbookot szkript előtti vagy utószkriptként használjon, importálnia kell azt az Automation-fiókjába, és közzé kell tennie a runbookot.
Jelenleg csak a PowerShell 5.1 és a Python 2 runbookok támogatottak pre/Post szkriptként. Más runbooktípusok, például a Python 3, a Graphical, a PowerShell-munkafolyamat és a grafikus PowerShell-munkafolyamat jelenleg nem támogatottak pre/Post szkriptként.
Szkript előtti és utáni paraméterek
Az előszkriptek és a post-scriptek konfigurálásakor ugyanúgy adhat meg paramétereket, mint egy runbook ütemezése. A paraméterek a frissítés üzembe helyezésekor vannak meghatározva. Az előszkriptek és a post-scriptek a következő típusokat támogatják:
- [karakter]
- [bájt]
- [int]
- [hosszú]
- [decimális]
- [önálló]
- [dupla]
- [DateTime]
- [sztring]
A szkript előtti és a szkript utáni runbook paraméterei nem támogatják a logikai, objektum- vagy tömbtípusokat. Ezek az értékek a runbookok meghibásodását okozzák.
Ha másik objektumtípusra van szüksége, a runbookban saját logikával egy másik típusba helyezheti.
A standard runbook-paraméterek mellett a SoftwareUpdateConfigurationRunContext
paraméter (JSON-sztring típusa) is meg van adva. Ha az előszkriptben vagy a szkript utáni runbookban definiálja a paramétert, a rendszer automatikusan átadja azt a frissítéstelepítésnek. A paraméter információkat tartalmaz a frissítés telepítéséről, amely a SoftwareUpdateconfigurations API által visszaadott információk egy része. Az alábbi szakaszok határozzák meg a társított tulajdonságokat.
SoftwareUpdateConfigurationRunContext tulajdonságai
Tulajdonság | Típus | Leírás |
---|---|---|
SoftwareUpdateConfigurationName | Sztring | A szoftverfrissítési konfiguráció neve. |
SoftwareUpdateConfigurationRunId | GUID | A futtatás egyedi azonosítója. |
SoftwareUpdateConfigurationSettings | A szoftverfrissítés konfigurálásához kapcsolódó tulajdonságok gyűjteménye. | |
SoftwareUpdateConfigurationSettings.OperatingSystem | Int | A frissítés központi telepítésére szánt operációs rendszerek. 1 = Windows és 2 = Linux |
SoftwareUpdateConfigurationSettings.Duration | Időbélyeg (Óó:MM:SS) | A frissítéstelepítés maximális időtartama a ISO8601 szerint fut PT[n]H[n]M[n]S , más néven karbantartási időszak.Példa: 02:00:00 |
SoftwareUpdateConfigurationSettings.WindowsConfiguration | Windows rendszerű számítógépekhez kapcsolódó tulajdonságok gyűjteménye. | |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.excludedKbNumbers | Sztring | A frissítéstelepítésből kizárt KB-k szóközzel elválasztott listája. |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.includedKbNumbers | Sztring | A frissítéstelepítésben szereplő KB-k szóközzel elválasztott listája. |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.UpdateCategories | Egész | 1 = "Kritikus"; 2 = "Biztonság" 4 = "UpdateRollUp" 8 = "FeaturePack" 16 = "ServicePack" 32 = "Definíció" 64 = "Eszközök" 128 = "Frissítések" |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.rebootSetting | Sztring | A frissítéstelepítés újraindítási beállításai. Az értékek a következőkIfRequired : , Never Always |
SoftwareUpdateConfigurationSettings.LinuxConfiguration | Linux rendszerű számítógépekhez kapcsolódó tulajdonságok gyűjteménye. | |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.IncludedPackageClassifications | Egész | 0 = "Besorolatlan" 1 = "Kritikus" 2 = "Biztonság" 4 = "Egyéb" |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.IncludedPackageNameMasks | Sztring | A frissítéstelepítésben szereplő csomagnevek szóközzel elválasztott listája. |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.ExcludedPackageNameMasks | Sztring | A frissítéstelepítésből kizárt csomagnevek szóközzel elválasztott listája. |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.RebootSetting | Sztring | A frissítéstelepítés újraindítási beállításai. Az értékek a következőkIfRequired : , Never Always |
SoftwareUpdateConfiguationSettings.AzureVirtualMachines | Sztringtömb | Az Azure-beli virtuális gépek erőforrás-azonosítóinak listája a frissítéstelepítésben. |
SoftwareUpdateConfigurationSettings.NonAzureComputerNames | Sztringtömb | A frissítéstelepítés nem Azure-beli számítógépeinek teljes tartományneveinek listája. |
Az alábbi példa egy JSON-sztring, amelyet egy Linux-számítógép SoftwareUpdateConfigurationSettings tulajdonságának ad át:
"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"
}
A következő példa egy JSON-sztring, amelyet egy Windows-számítógép SoftwareUpdateConfigurationSettings tulajdonságának ad át:
"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"
]
}
}
Az összes tulajdonsággal kapcsolatos teljes példa a következő helyen található: Szoftverfrissítés konfigurációjának lekérése név szerint.
Feljegyzés
Az SoftwareUpdateConfigurationRunContext
objektum ismétlődő bejegyzéseket tartalmazhat a gépekhez. Ez azt eredményezheti, hogy az előszkriptek és a post-scriptek többször is futnak ugyanazon a gépen. Ennek a viselkedésnek a megkerüléséhez csak Sort-Object -Unique
egyedi virtuálisgép-neveket jelöljön ki.
Előszkript vagy utószkript használata üzembe helyezéskor
Ha egy frissítéstelepítésben előszkriptet vagy utószkriptet szeretne használni, először hozzon létre egy frissítéstelepítést. Válassza a Pre-scripts + Post-Scripts lehetőséget. Ez a művelet megnyitja a Select Pre-scripts + Post-scripts lapot.
Válassza ki a használni kívánt szkriptet. Ebben a példában az UpdateManagement-TurnOnVms runbookot használjuk. A runbook kiválasztásakor megnyílik a Szkript konfigurálása lap. Válassza az Előszkript, majd az OK gombot.
Ismételje meg ezt a folyamatot az UpdateManagement-TurnOffVms szkript esetében . Ha azonban a szkripttípust választja, válassza a Post-Script lehetőséget.
A Kijelölt elemek szakasz most már mindkét kijelölt szkriptet megjeleníti. Az egyik egy előszkript, a másik pedig egy utószkript:
Fejezze be a frissítés üzembe helyezésének konfigurálását.
Ha a frissítés telepítése befejeződött, az eredmények megtekintéséhez lépjen a Frissítéstelepítések elemre. Amint látható, az állapot az előszkript és a post-script esetében van megadva:
A frissítéstelepítés futtatásának kiválasztásával további részletek jelennek meg az előszkriptekről és a szkriptek utáni alkalmazásokról. A futtatáskor megjelenik egy hivatkozás a szkript forrására.
Üzembe helyezés leállítása
Ha egy üzembe helyezést előszkript alapján szeretne leállítani, kivételt kell kivennie . Ha nem teszi meg, az üzembe helyezés és az utólagosan futtatandó szkript továbbra is futni fog. Az alábbi kódrészlet bemutatja, hogyan háríthat el kivételt a PowerShell használatával.
#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
}
}
A Python 2-ben a kivételkezelés egy próbablokkban történik.
Gépekkel való interakció
Az előzetesen és utólagosan futtatandó szkriptek runbookokként futnak az Automation-fiókban, nem pedig közvetlenül a környezetben lévő gépeken. Az előzetesen és utólagosan futtatandó feladatok az Azure-kontetusban is futnak, és nem rendelkeznek hozzáféréssel a nem Azure-beli gépekhez. Az alábbi szakaszok bemutatják, hogyan kezelheti közvetlenül a gépeket, függetlenül attól, hogy Azure-beli vagy nem Azure-beli gépekről van-e szó.
Azure-gépek használata
Az elő- és utófeladatok runbookokként futnak, és nem futnak natív módon az Azure-beli virtuális gépeken az üzembe helyezés során. Az Azure VM-ekkel való interakcióhoz a következő elemekkel kell rendelkeznie:
- Felügyelt identitás vagy futtató fiók
- Futtatni kívánt runbook
Az Azure-beli gépek használatához az Invoke-AzVMRunCommand parancsmaggal kell kommunikálnia az Azure-beli virtuális gépekkel. Ennek módjára példaként tekintse meg a Runbook Update Management – run script with Run parancs parancsot.
Nem Azure-beli gépek használata
Az elő- és utófeladatok az Azure-környezetben futnak, és nem rendelkeznek hozzáféréssel a nem Azure-beli gépekhez. A nem Azure-beli gépekkel való interakcióhoz a következő elemekkel kell rendelkeznie:
- Felügyelt identitás vagy futtató fiók
- A hibrid runbook-feldolgozó telepítve van a gépre
- Helyileg futtatni kívánt runbook
- Szülő runbook
A nem Azure-beli gépekkel való interakcióhoz egy szülő runbook fut az Azure-kontextusban. Ez a runbook meghív egy gyermek runbookot a Start-AzAutomationRunbook parancsmaggal. Meg kell adnia a paramétert RunOn
, és meg kell adnia a futtatandó szkript hibrid runbook-feldolgozójának nevét. Tekintse meg a runbook példa Update Management – szkript helyi futtatása című példáját.
Javítás telepítésének megszakítása
Ha az előszkript hibát ad vissza, érdemes megszakítani az üzembe helyezést. Ehhez hibajelzést kell adnia a szkriptben minden olyan logikához, amely hibát eredményezne.
if (<My custom error logic>)
{
#Throw an error to fail the patch deployment.
throw "There was an error, abort deployment"
}
A Python 2-ben, ha hibát szeretne jelezni egy bizonyos feltétel bekövetkezésekor, használjon egy emelési utasítást.
If (<My custom error logic>)
raise Exception('Something happened.')
Példák
Az előszkriptekhez és a post-scriptekhez tartozó minták megtalálhatók az Azure Automation GitHub-szervezetben és a PowerShell-galéria, vagy importálhatja őket az Azure Portalon keresztül. Ehhez az Automation-fiók Folyamatautomatizálás területén válassza a Runbookok gyűjteményét. Használja az Update Managementet a szűrőhöz.
Vagy megkeresheti őket a szkript neve alapján, ahogy az a következő listában látható:
- Frissítéskezelés – Virtuális gépek bekapcsolása
- Frissítéskezelés – Virtuális gépek kikapcsolása
- Frissítéskezelés – Szkript helyi futtatása
- Frissítéskezelés – Sablon pre/post szkriptekhez
- Frissítéskezelés – Szkript futtatása a Futtatás paranccsal
Fontos
A runbookok importálása után közzé kell tennie őket a használatuk előtt. Ehhez keresse meg a runbookot az Automation-fiókjában, válassza a Szerkesztés, majd a Közzététel lehetőséget.
A minták az alábbi példában definiált alapsablonon alapulnak. Ezzel a sablonnal saját runbookot hozhat létre, amelyet előszkriptekkel és utószkriptekkel használhat. A rendszer tartalmazza az Azure-ral való hitelesítéshez és a SoftwareUpdateConfigurationRunContext
paraméter kezeléséhez szükséges logikát.
<#
.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
#>
Ha azt szeretné, hogy a runbook a rendszer által hozzárendelt felügyelt identitással fusson, hagyja meg a kódot. Ha inkább felhasználó által hozzárendelt felügyelt identitást szeretne használni, akkor:
- A 22. sorból távolítsa el
$AzureContext = (Connect-AzAccount -Identity).context
a - Cserélje le a
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
- Adja meg az ügyfél azonosítóját.
Feljegyzés
Nem grafikus PowerShell-runbookok esetén, Add-AzAccount
és Add-AzureRMAccount
a Connect-AzAccount aliasai. Használhatja ezeket a parancsmagokat, vagy frissítheti az Automation-fiókjában lévő modulokat a legújabb verziókra. Előfordulhat, hogy frissítenie kell a modulokat, még akkor is, ha most hozott létre egy új Automation-fiókot.
Következő lépések
A frissítéskezelés részleteiért lásd : A virtuális gépek frissítéseinek és javításainak kezelése.