Scripts voorafgaand aan de back-up en scripts die erop volgen, beheren

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

Eigenschappen Type Omschrijving
SoftwareUpdateConfigurationName String De naam van de configuratie van de software-update.
SoftwareUpdateConfigurationRunId GUID De unieke id voor de uitvoering.
SoftwareUpdateConfiguration Instellingen Een verzameling eigenschappen met betrekking tot de configuratie van de software-update.
SoftwareUpdateConfiguration Instellingen. Operatingsystem Int De besturingssystemen die zijn gericht op de update-implementatie. 1 = Windows en 2 = Linux
SoftwareUpdateConfiguration Instellingen. Duur 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
SoftwareUpdateConfiguration Instellingen. WindowsConfiguration Een verzameling eigenschappen met betrekking tot Windows-computers.
SoftwareUpdateConfiguration Instellingen. WindowsConfiguration.excludedKbNumbers String Een door spaties gescheiden lijst met KB's die zijn uitgesloten van de update-implementatie.
SoftwareUpdateConfiguration Instellingen. WindowsConfiguration.includedKbNumbers String Een door spaties gescheiden lijst met KB's die zijn opgenomen in de update-implementatie.
SoftwareUpdateConfiguration Instellingen. WindowsConfiguration.UpdateCategories Geheel getal 1 = "Kritiek";
2 = "Beveiliging"
4 = "UpdateRollUp"
8 = "FeaturePack"
16 = "ServicePack"
32 = "Definitie"
64 = "Extra"
128 = "Updates"
SoftwareUpdateConfiguration Instellingen. WindowsConfiguration.rebootSetting String Instellingen voor opnieuw opstarten voor de update-implementatie. Waarden zijnIfRequired, NeverAlways
SoftwareUpdateConfiguration Instellingen. LinuxConfiguration Een verzameling eigenschappen met betrekking tot Linux-computers.
SoftwareUpdateConfiguration Instellingen. LinuxConfiguration.IncludedPackageClassifications Geheel getal 0 = "Niet geclassificeerd"
1 = "Kritiek"
2 = "Beveiliging"
4 = "Overig"
SoftwareUpdateConfiguration Instellingen. LinuxConfiguration.IncludedPackageNameMasks String Een door spaties gescheiden lijst met pakketnamen die zijn opgenomen in de update-implementatie.
SoftwareUpdateConfiguration Instellingen. LinuxConfiguration.ExcludedPackageNameMasks String Een door spatie gescheiden lijst met pakketnamen die zijn uitgesloten van de update-implementatie.
SoftwareUpdateConfiguration Instellingen. LinuxConfiguration.RebootSetting String Instellingen voor opnieuw opstarten voor de update-implementatie. Waarden zijnIfRequired, NeverAlways
SoftwareUpdateConfiguation Instellingen. AzureVirtualMachines Tekenreeksmatrix Een lijst met resourceIds voor de Azure-VM's in de update-implementatie.
SoftwareUpdateConfiguration Instellingen. Niet-AzureComputerNames 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 SoftwareUpdateConfiguration Instellingen eigenschappen 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/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"
 }

Het volgende voorbeeld is een JSON-tekenreeks die wordt doorgegeven aan de SoftwareUpdateConfiguration Instellingen eigenschappen 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/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"
      ]
    }
  }

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.

Select scripts

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:

Selected items

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:

Update results

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.

Deployment run results

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:

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.

Gallery list

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:

  1. Uit regel 22, verwijder $AzureContext = (Connect-AzAccount -Identity).context,
  2. Vervang het door $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, en
  3. Voer de client-id in.

Notitie

Voor niet-grafische PowerShell-runbooks en Add-AzureRMAccount aliassen Add-AzAccount zijn voor Verbinding maken-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.