Scripts voorafgaand aan de back-up en scripts die erop volgen, beheren
Belangrijk
Automation Update Management is op 31 augustus 2024 buiten gebruik gesteld en we raden u aan Azure Update Manager te gebruiken. Volg de richtlijnen voor migratie van Automation Update Management naar Azure Update Manager.
Scripts vooraf en achteraf zijn runbooks die u in uw Azure Automation-account kunt uitvoeren voorafgaand aan (voor de taak) en volgend op (na de taak) een update-implementatie. Scripts vooraf en achteraf worden uitgevoerd in de Azure-context, niet lokaal. Scripts vooraf worden aan het begin van de update-implementatie uitgevoerd. In Windows worden scripts achteraf uitgevoerd aan het einde van de implementatie en nadat er conform de configuratie opnieuw is opgestart. Voor Linux worden scripts achteraf uitgevoerd na het einde van de implementatie, niet nadat de computer opnieuw is opgestart.
Vereisten voor scripts vooraf en achteraf
Als u een runbook wilt gebruiken als een prescript of postscript, moet u het importeren in uw Automation-account en het runbook publiceren.
Op dit moment worden alleen PowerShell 5.1- en Python 2-runbooks ondersteund als pre-/postscripts. Andere runbooktypen, zoals Python 3, Graphical, PowerShell Workflow, Graphical PowerShell Workflow, worden momenteel niet ondersteund als Pre/Post-scripts.
Parameters vóór scripts en postscripts
Wanneer u prescripts en postscripts configureert, kunt u parameters doorgeven, net zoals het plannen van een runbook. Parameters worden gedefinieerd op het moment dat de update-implementatie is gemaakt. Prescripts en postscripts ondersteunen de volgende typen:
- [char]
- [byte]
- [int]
- [lang]
- [decimaal]
- [enkel]
- [dubbel]
- [Datum/tijd]
- [tekenreeks]
Vooraf script- en postscriptrunbookparameters bieden geen ondersteuning voor booleaanse, object- of matrixtypen. Deze waarden zorgen ervoor dat de runbooks mislukken.
Als u een ander objecttype nodig hebt, kunt u het naar een ander type casten met uw eigen logica in het runbook.
Naast de standaardrunbookparameters wordt de SoftwareUpdateConfigurationRunContext
parameter (type JSON-tekenreeks) geleverd. Als u de parameter definieert in uw prescript- of postscript-runbook, wordt deze automatisch doorgegeven door de update-implementatie. De parameter bevat informatie over de update-implementatie. Dit is een subset van informatie die wordt geretourneerd door de SoftwareUpdateconfigurations-API. In de onderstaande secties worden de bijbehorende eigenschappen gedefinieerd.
Eigenschappen van SoftwareUpdateConfigurationRunContext
Eigenschap | Type | Description |
---|---|---|
SoftwareUpdateConfigurationName | String | De naam van de configuratie van de software-update. |
SoftwareUpdateConfigurationRunId | GUID | De unieke id voor de uitvoering. |
SoftwareUpdateConfigurationSettings | Een verzameling eigenschappen met betrekking tot de configuratie van de software-update. | |
SoftwareUpdateConfigurationSettings.OperatingSystem | Int | De besturingssystemen die zijn gericht op de update-implementatie. 1 = Windows en 2 = Linux |
SoftwareUpdateConfigurationSettings.Duration | Tijdspanne (UU:MM:SS) | De maximale duur van de update-implementatie wordt uitgevoerd volgens PT[n]H[n]M[n]S ISO8601; ook wel het onderhoudsvenster genoemd.Voorbeeld: 02:00:00 |
SoftwareUpdateConfigurationSettings.WindowsConfiguration | Een verzameling eigenschappen met betrekking tot Windows-computers. | |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.excludedKbNumbers | String | Een door spaties gescheiden lijst met KB's die zijn uitgesloten van de update-implementatie. |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.includedKbNumbers | String | Een door spaties gescheiden lijst met KB's die zijn opgenomen in de update-implementatie. |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.UpdateCategories | Geheel getal | 1 = "Kritiek"; 2 = "Beveiliging" 4 = "UpdateRollUp" 8 = "FeaturePack" 16 = "ServicePack" 32 = "Definitie" 64 = "Extra" 128 = "Updates" |
SoftwareUpdateConfigurationSettings.WindowsConfiguration.rebootSetting | String | Instellingen voor opnieuw opstarten voor de update-implementatie. Waarden zijnIfRequired , Never Always |
SoftwareUpdateConfigurationSettings.LinuxConfiguration | Een verzameling eigenschappen met betrekking tot Linux-computers. | |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.IncludedPackageClassifications | Geheel getal | 0 = "Niet geclassificeerd" 1 = "Kritiek" 2 = "Beveiliging" 4 = "Overig" |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.IncludedPackageNameMasks | String | Een door spaties gescheiden lijst met pakketnamen die zijn opgenomen in de update-implementatie. |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.ExcludedPackageNameMasks | String | Een door spatie gescheiden lijst met pakketnamen die zijn uitgesloten van de update-implementatie. |
SoftwareUpdateConfigurationSettings.LinuxConfiguration.RebootSetting | String | Instellingen voor opnieuw opstarten voor de update-implementatie. Waarden zijnIfRequired , Never Always |
SoftwareUpdateConfiguationSettings.AzureVirtualMachines | Tekenreeksmatrix | Een lijst met resourceIds voor de Azure-VM's in de update-implementatie. |
SoftwareUpdateConfigurationSettings.NonAzureComputerNames | Tekenreeksmatrix | Een lijst met de FQDN's van niet-Azure-computers in de update-implementatie. |
Het volgende voorbeeld is een JSON-tekenreeks die wordt doorgegeven aan de eigenschappen SoftwareUpdateConfigurationSettings voor een Linux-computer:
"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"
}
Het volgende voorbeeld is een JSON-tekenreeks die wordt doorgegeven aan de eigenschappen SoftwareUpdateConfigurationSettings voor een Windows-computer:
"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"
]
}
}
Een volledig voorbeeld met alle eigenschappen vindt u op: Software-updateconfiguratie ophalen op naam.
Notitie
Het SoftwareUpdateConfigurationRunContext
object kan dubbele vermeldingen voor computers bevatten. Dit kan ertoe leiden dat prescripts en postscripts meerdere keren op dezelfde computer worden uitgevoerd. U kunt dit gedrag Sort-Object -Unique
omzeilen door alleen unieke VM-namen te selecteren.
Een prescript of postscript gebruiken in een implementatie
Als u een prescript of postscript in een update-implementatie wilt gebruiken, begint u met het maken van een update-implementatie. Selecteer Prescripts en postscripts. Met deze actie wordt de pagina Prescripts en postscripts selecteren geopend.
Selecteer het script dat u wilt gebruiken. In dit voorbeeld gebruiken we het runbook UpdateManagement-TurnOnVms . Wanneer u het runbook selecteert, wordt de pagina Script configureren geopend. Selecteer Prescript en selecteer vervolgens OK.
Herhaal dit proces voor het script UpdateManagement-TurnOffVms . Als u echter het scripttype kiest, selecteert u Post-Script.
In de sectie Geselecteerde items worden nu beide geselecteerde scripts weergegeven. De ene is een prescript en de andere is een postscript:
Voltooi de configuratie van uw update-implementatie.
Wanneer de update-implementatie is voltooid, kunt u naar Update-implementaties gaan om de resultaten weer te geven. Zoals u kunt zien, wordt de status opgegeven voor het prescript en postscript:
Door de uitvoering van de update-implementatie te selecteren, ziet u aanvullende details van prescripts en postscripts. Er wordt een koppeling naar de scriptbron op het moment van de uitvoering opgegeven.
Een implementatie stoppen
Als u een implementatie wilt stoppen op basis van een prescript, moet u een uitzondering genereren . Als u dat niet doet, worden de implementatie en het script achteraf nog steeds uitgevoerd. In het volgende codefragment ziet u hoe u een uitzondering genereert met behulp van PowerShell.
#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
}
}
In Python 2 wordt uitzonderingsafhandeling beheerd in een try-blok .
Interactie met computers
Scripts vooraf en achteraf worden uitgevoerd als runbooks in uw Automation-account en niet rechtstreeks op de computers in uw implementatie. Taken vooraf en achteraf worden ook uitgevoerd in de Azure-context en hebben geen toegang tot niet-Azure-computers. In de volgende secties ziet u hoe u rechtstreeks met de machines kunt communiceren, ongeacht of het azure-VM's of niet-Azure-machines zijn.
Interactie met Azure-machines
Pre-taken en post-taken worden uitgevoerd als runbooks en worden niet systeemeigen uitgevoerd op uw Azure-VM's in uw implementatie. Als u wilt communiceren met uw Azure-VM's, moet u de volgende items hebben:
- Een beheerde identiteit of een Uitvoeren als-account
- Een runbook dat u wilt uitvoeren
Als u wilt communiceren met Azure-machines, moet u de cmdlet Invoke-AzVMRunCommand gebruiken om te communiceren met uw Azure-VM's. Voor een voorbeeld van hoe u dit doet, raadpleegt u het runbookvoorbeeld Updatebeheer- script uitvoeren met de opdracht Uitvoeren.
Interactie met niet-Azure-machines
Pre-taken en post-taken worden uitgevoerd in de Azure-context en hebben geen toegang tot niet-Azure-machines. Als u wilt communiceren met de niet-Azure-computers, moet u de volgende items hebben:
- Een beheerde identiteit of een Uitvoeren als-account
- Hybrid Runbook Worker geïnstalleerd op de computer
- Een runbook dat u lokaal wilt uitvoeren
- Een bovenliggend runbook
Voor communicatie met niet-Azure-computers wordt een bovenliggend runbook uitgevoerd in de Azure-context. Dit runbook roept een onderliggend runbook aan met de cmdlet Start-AzAutomationRunbook. U moet de RunOn
parameter opgeven en de naam van de Hybrid Runbook Worker opgeven waarop het script moet worden uitgevoerd. Zie het runbookvoorbeeld Updatebeheer - script lokaal uitvoeren.
Patchimplementatie afbreken
Als uw prescript een fout retourneert, kunt u de implementatie afbreken. Hiervoor moet u een fout in uw script instellen voor elke logica die een fout zou vormen.
if (<My custom error logic>)
{
#Throw an error to fail the patch deployment.
throw "There was an error, abort deployment"
}
Als u in Python 2 een fout wilt genereren wanneer een bepaalde voorwaarde optreedt, gebruikt u een instructie met een aanhef .
If (<My custom error logic>)
raise Exception('Something happened.')
Voorbeelden
Voorbeelden voor prescripts en postscripts vindt u in de Azure Automation GitHub-organisatie en de PowerShell Gallery, of u kunt ze importeren via Azure Portal. Hiervoor selecteert u runbooksgalerie in uw Automation-account onder Procesautomatisering. Gebruik Updatebeheer voor het filter.
U kunt ze ook zoeken op basis van hun scriptnaam, zoals wordt weergegeven in de volgende lijst:
- Updatebeheer - VM's inschakelen
- Updatebeheer - VM's uitschakelen
- Updatebeheer - Script lokaal uitvoeren
- Updatebeheer - Sjabloon voor pre-/postscripts
- Updatebeheer - Script uitvoeren met opdracht Uitvoeren
Belangrijk
Nadat u de runbooks hebt geïmporteerd, moet u ze publiceren voordat ze kunnen worden gebruikt. Hiervoor zoekt u het runbook in uw Automation-account, selecteert u Bewerken en selecteert u Publiceren.
De voorbeelden zijn allemaal gebaseerd op de basissjabloon die in het volgende voorbeeld is gedefinieerd. Deze sjabloon kan worden gebruikt om uw eigen runbook te maken voor gebruik met prescripts en postscripts. De benodigde logica voor verificatie met Azure en het verwerken van de SoftwareUpdateConfigurationRunContext
parameter wordt opgenomen.
<#
.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
#>
Als u wilt dat het runbook wordt uitgevoerd met de door het systeem toegewezen beheerde identiteit, laat u de code staan. Als u liever een door de gebruiker toegewezen beheerde identiteit gebruikt, gaat u als volgende te werk:
- Uit regel 22, verwijder
$AzureContext = (Connect-AzAccount -Identity).context
, - Vervang het door
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
, en - Voer de client-id in.
Notitie
Voor niet-grafische PowerShell-runbooks Add-AzAccount
en Add-AzureRMAccount
zijn aliassen voor Connect-AzAccount. U kunt deze cmdlets gebruiken of u kunt uw modules bijwerken naar de nieuwste versie in uw Automation-account. Zelfs wanneer u zojuist een nieuw Automation-account hebt aangemaakt, moet u mogelijk uw modules bijwerken.
Volgende stappen
Zie Updates en patches voor uw VM's beheren voor meer informatie over updatebeheer.