Administración de scripts previos y posterioresManage pre and post scripts

Los scripts previos y posteriores le permiten ejecutar runbooks de PowerShell en la cuenta de Automation antes (antes de la tarea) y después (después de la tarea) de la implementación de una actualización.Pre and post scripts let you run PowerShell runbooks in your Automation Account before (pre-task) and after (post-task) an update deployment. Los scripts previos y posteriores se ejecutan en el contexto de Azure y no de forma local.Pre and post scripts run in the Azure context and not locally. Los scripts previos se ejecutan al principio de la implementación de actualizaciones.Pre-scripts run at the beginning of the update deployment. Los scripts posteriores se ejecutan al final de la implementación y después de todos reinicios que estén configurados.Post scripts run at the end of the deployment and after any reboots that are configured.

Requisitos de runbookRunbook requirements

Para que un runbook se utilice como script previo o posterior, el runbook debe importarse a su cuenta de automatización y publicarse.For a runbook to be used as a pre or post script, the runbook needs to be imported into your automation account and published. Para más información sobre este proceso, consulte Publicación de un runbook.To learn more about this process, see Publishing a runbook.

Uso de script previo o posteriorUsing a pre/post script

Para usar un script previo o posterior en una implementación de actualización, solo tiene que empezar por crear una de estas implementaciones de actualización.To use a pre and or post script in an Update Deployment, start by creating an Update Deployment. Seleccione Pre-scripts + Post Scripts (Scripts previos + scripts posteriores).Select Pre-scripts + Post Scripts. Se abrirá la página Seleccionar scripts previos + scripts posteriores.This action opens the Select Pre-scripts + Post-scripts page.

Selección de scripts

Seleccione el script que desea usar; en este ejemplo, ha usado el runbook UpdateManagement TurnOnVms.Select the script you want to use, in this example, you used the UpdateManagement-TurnOnVms runbook. Al seleccionar el runbook, se abre la página Configurar script y elija Pre-Script (Script previo).When you select the runbook the Configure Script page opens, choose Pre-Script. Pulse OK (Aceptar) cuando haya terminado.Click OK when done.

Repita este proceso para el script UpdateManagement TurnOffVms.Repeat this process for the UpdateManagement-TurnOffVms script. Pero al elegir el tipo de script, elija Script posterior.But when choosing the Script type, choose Post-Script.

La sección Elementos seleccionados ahora muestra los dos scripts seleccionados y activados como script previo y el otro como script posterior.The Selected items section now shows both your scripts selected and on is a pre-script and the other is a post-script.

Elementos seleccionados

Finalice la configuración de su implementación de actualizaciones.Finish configuring your Update Deployment.

Cuando se completa la implementación de actualizaciones, puede ir a Implementaciones de actualizaciones para ver los resultados.When your Update Deployment is complete, you can go to Update deployments to view the results. Como se puede ver, se proporciona el estado del script previo y el posterior.As you can see, the status of the pre-script and post-script are provided.

Resultados de actualización

Si se hace clic en la ejecución de la implementación de actualizaciones, se proporcionan detalles adicionales acerca de los scripts previos y posteriores.By clicking into the update deployment run, you're provided additional details to the pre and post scripts. Se proporciona un vínculo al origen del script en el momento de la ejecución.A link to the script source at the time of the run is provided.

Resultados de la ejecución de la implementación

Paso de parámetrosPassing parameters

Cuando se configuran los scripts previos y posteriores, se pueden pasar parámetros como cuando se programa un runbook.When you configure pre and post scripts, you can pass in parameters just like scheduling a runbook. Los parámetros se definen en el momento de la creación de la implementación de actualización.Parameters are defined at the time of update deployment creation. Los scripts anteriores y posteriores admiten los siguientes tipos:Pre and Post scripts support the following types:

  • [char][char]
  • [byte][byte]
  • [int][int]
  • [long][long]
  • [decimal][decimal]
  • [single][single]
  • [double][double]
  • [DateTime][DateTime]
  • [string][string]

Si necesita otro tipo de objeto, puede convertirlo a otro tipo mediante su propia lógica en el runbook.If you need another object type, you can cast it to another type with your own logic in the runbook.

Además de los parámetros estándar de runbook, se proporciona un parámetro adicional.In addition to your standard runbook parameters, an additional parameter is provided. Este parámetro es SoftwareUpdateConfigurationRunContext.This parameter is SoftwareUpdateConfigurationRunContext. Este parámetro es una cadena JSON, y si define el parámetro en su script previo o posterior, la implementación de la actualización lo pasará automáticamente.This parameter is a JSON string, and if you define the parameter in your pre or post script, it's automatically passed in by the update deployment. El parámetro contiene información sobre la implementación de la actualización, que es un subconjunto de la información que devuelve SoftwareUpdateconfigurations API. En la tabla siguiente se muestran las propiedades que se proporcionan en la variable:The parameter contains information about the update deployment, which is a subset of information returned by the SoftwareUpdateconfigurations API The following table shows you the properties that are provided in the variable:

Propiedades de SoftwareUpdateConfigurationRunContextSoftwareUpdateConfigurationRunContext properties

PropiedadProperty DESCRIPCIÓNDescription
SoftwareUpdateConfigurationNameSoftwareUpdateConfigurationName El nombre de la configuración de actualizaciones de softwareThe name of the Software Update Configuration
SoftwareUpdateConfigurationRunIdSoftwareUpdateConfigurationRunId El identificador único de la ejecución.The unique id for the run.
SoftwareUpdateConfigurationSettingsSoftwareUpdateConfigurationSettings Una colección de propiedades relacionadas con la configuración de actualizaciones de softwareA collection of properties related to the Software Update Configuration
SoftwareUpdateConfigurationSettings.operatingSystemSoftwareUpdateConfigurationSettings.operatingSystem Sistemas operativos a los que se dirige la implementación de la actualizaciónThe operating systems targeted for the update deployment
SoftwareUpdateConfigurationSettings.durationSoftwareUpdateConfigurationSettings.duration La duración máxima de la implementación de la actualización es de PT[n]H[n]M[n]S, según ISO8601, también llamada "ventana de mantenimiento".The maximum duration of the update deployment run as PT[n]H[n]M[n]S as per ISO8601, also called the "maintenance window"
SoftwareUpdateConfigurationSettings.WindowsSoftwareUpdateConfigurationSettings.Windows Una colección de propiedades relacionadas con los equipos de WindowsA collection of properties related to Windows computers
SoftwareUpdateConfigurationSettings.Windows.excludedKbNumbersSoftwareUpdateConfigurationSettings.Windows.excludedKbNumbers Una lista de artículos de Knowledge Base que se excluyen de la implementación de actualizacionesA list of KBs that are excluded from the update deployment
SoftwareUpdateConfigurationSettings.Windows.includedUpdateClassificationsSoftwareUpdateConfigurationSettings.Windows.includedUpdateClassifications Clasificaciones de actualizaciones seleccionadas para la implementación de actualizacionesUpdate classifications selected for the update deployment
SoftwareUpdateConfigurationSettings.Windows.rebootSettingSoftwareUpdateConfigurationSettings.Windows.rebootSetting Reinicio de la configuración para la implementación de actualizacionesReboot settings for the update deployment
azureVirtualMachinesazureVirtualMachines Una lista de identificadores de recurso para las máquinas virtuales de Azure en la implementación de actualizacionesA list of resourceIds for the Azure VMs in the update deployment
nonAzureComputerNamesnonAzureComputerNames Una lista de los nombres de domino completos de los equipos que no son de Azure en la implementación de actualizacionesA list of the Non-Azure computers FQDNs in the update deployment

En el ejemplo siguiente se muestra una cadena JSON que se pasa al parámetro SoftwareUpdateConfigurationRunContext:The following example is a JSON string passed in to the SoftwareUpdateConfigurationRunContext parameter:

"SoftwareUpdateConfigurationRunContext":{
      "SoftwareUpdateConfigurationName":"sampleConfiguration",
      "SoftwareUpdateConfigurationRunId":"00000000-0000-0000-0000-000000000000",
      "SoftwareUpdateConfigurationSettings":{
         "operatingSystem":"Windows",
         "duration":"PT2H0M",
         "windows":{
            "excludedKbNumbers":[
               "168934",
               "168973"
            ],
            "includedUpdateClassifications":"Critical",
            "rebootSetting":"IfRequired"
         },
         "azureVirtualMachines":[
            "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myresources/providers/Microsoft.Compute/virtualMachines/vm-01",
            "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myresources/providers/Microsoft.Compute/virtualMachines/vm-02",
            "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myresources/providers/Microsoft.Compute/virtualMachines/vm-03"
         ], 
         "nonAzureComputerNames":[
            "box1.contoso.com",
            "box2.contoso.com"
         ]
      }
   }

Se puede encontrar un ejemplo completo con todas las propiedades en: Software Update Configurations - Get By Name (Configuraciones de actualizaciones de software: obtener por el nombre)A full example with all properties can be found at: Software Update Configurations - Get By Name

Nota

El objeto SoftwareUpdateConfigurationRunContext puede contener entradas duplicadas para las máquinas.The SoftwareUpdateConfigurationRunContext object can contain duplicate entries for machines. Esto puede hacer que los scripts previos y posteriores se ejecuten varias veces en la misma máquina.This can cause Pre and Post scripts to run multiple times on the same machine. Para solucionar este comportamiento, use Sort-Object -Unique para seleccionar solo nombres de máquina virtual únicos en el script.To workaround this behavior, use Sort-Object -Unique to select only unique VM names in your script.

Detención de una implementaciónStopping a deployment

Si quiere detener una implementación basada en un script previo, debe generar una excepción.If you want to stop a deployment based on a Pre script, you must throw an exception. Si no genera una excepción, la implementación y el script posterior se seguirán ejecutando.If you don't throw an exception, the deployment and Post script will still run. El runbook de ejemplo de la galería muestra cómo puede hacerlo.The example runbook in the gallery shows how you can do this. Este es un fragmento de código de ese runbook.The following is a snippet from that runbook.

#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
    }
}

EjemplosSamples

Se pueden encontrar ejemplos de scripts previos y posteriores la galería del centro de scripts, o importarse mediante Azure Portal.Samples for pre and post scripts can be found in the Script Center Gallery, or imported through the Azure portal. Para importarlos mediante el portal, en su la cuenta de Automation, en Automatización de procesos, seleccione Galería de runbooks.To import them through the portal, in your Automation Account, under Process Automation, select Runbooks Gallery. Utilice Update Management para el filtro.Use Update Management for the filter.

Lista de la galería

O puede buscarlos por su nombre de script, tal y como se muestra en la siguiente lista:Or you can search for them by their script name as seen in the following list:

  • Update Management: activar máquinas virtualesUpdate Management - Turn On VMs
  • Update Management: desactivar máquinas virtualesUpdate Management - Turn Off VMs
  • Update Management: ejecución de scripts de forma localUpdate Management - Run Script Locally
  • Update Management: plantilla para scripts previos y posterioresUpdate Management - Template for Pre/Post Scripts
  • Update Management: ejecutar script con el comando de ejecuciónUpdate Management - Run Script with Run Command

Importante

Después de importar los runbooks, debe publicarlos antes de que se puedan usar.After you import the runbooks, you must Publish them before they can be used. Para ello, busque el runbook en su cuenta de Automation, seleccione Editar y haga clic en Publicar.To do that find the runbook in your Automation Account, select Edit, and click Publish.

Todos los ejemplos se basan en la plantilla básica que se define en el ejemplo siguiente.The samples are all based on the basic template that is defined in the following example. Esta plantilla se puede usar para crear el propio runbook para usarlo con los scripts previos y posteriores.This template can be used to create your own runbook to use with pre and post scripts. Se incluye la lógica necesaria para realizar una autenticación con Azure así como para manejar el parámetro SoftwareUpdateConfigurationRunContext.The necessary logic for authenticating with Azure and handling the SoftwareUpdateConfigurationRunContext parameter are included.

<# 
.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 a RunAs account. 
 
.PARAMETER SoftwareUpdateConfigurationRunContext 
  This is a system variable which is automatically passed in by Update Management during a deployment. 
#> 
 
param( 
    [string]$SoftwareUpdateConfigurationRunContext 
) 
#region BoilerplateAuthentication 
#This requires a RunAs account 
$ServicePrincipalConnection = Get-AutomationConnection -Name 'AzureRunAsConnection' 
 
Add-AzureRmAccount ` 
    -ServicePrincipal ` 
    -TenantId $ServicePrincipalConnection.TenantId ` 
    -ApplicationId $ServicePrincipalConnection.ApplicationId ` 
    -CertificateThumbprint $ServicePrincipalConnection.CertificateThumbprint 
 
$AzureContext = Select-AzureRmSubscription -SubscriptionId $ServicePrincipalConnection.SubscriptionID 
#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-AzureRmAutomationVariable -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 
#>      

Interacción con las máquinasInteracting with machines

Las tareas previas y anteriores se ejecutan como un runbook en la cuenta de Automation y no directamente en las máquinas de la implementación.Pre and post tasks run as a runbook in your Automation Account and not directly on the machines in your deployment. Las tareas previas y posteriores también se ejecutan en el contexto de Azure y no tienen acceso a máquinas que no son de Azure.Pre and post tasks also run in the Azure context and don't have access to Non-Azure machines. En las secciones siguientes se muestra cómo interactuar directamente con las máquinas, ya sea que se trate de una máquina virtual de Azure o una máquina que no es de Azure:The following sections show how you can interact with the machines directly whether they're an Azure VM or a Non-Azure machine:

Interacción con máquinas de AzureInteracting with Azure machines

Las tareas previas y posteriores se ejecutan como runbooks y no se ejecutan de manera nativa en las máquinas virtuales de Azure de la implementación.Pre and post tasks are run as runbooks and don't natively run on your Azure VMs in your deployment. Para interactuar con las máquinas virtuales de Azure, debe tener estos elementos:To interact with your Azure VMs, you must have the following items:

  • Una cuenta de ejecuciónA Run As account
  • Un runbook que quiera ejecutarA runbook you want to run

Para interactuar con máquinas de Azure, debe usar el cmdlet Invoke-AzureRmVMRunCommand para interactuar con las máquinas virtuales de Azure.To interact with Azure machines, you should use the Invoke-AzureRmVMRunCommand cmdlet to interact with your Azure VMs. Para un ejemplo de cómo hacerlo, consulte el ejemplo de runbook Update Management - Run Script with Run Command (Update Management: ejecutar script con el comando de ejecución).For an example of how to do this, see the runbook example Update Management - Run Script with Run Command.

Interactuación con máquinas que no son de AzureInteracting with Non-Azure machines

Las tareas previas y posteriores se ejecutan en el contexto de Azure y no tienen acceso a máquinas que no son de Azure.Pre and post tasks run in the Azure context and don't have access to Non-Azure machines. Para poder interactuar con las máquinas que no son de Azure, debe tener los siguientes elementos:To interact with the Non-Azure machines, you must have the following items:

  • Una cuenta de ejecuciónA Run As account
  • Hybrid Runbook Worker instalado en la máquinaHybrid Runbook Worker installed on the machine
  • Un runbook que desea ejecutar localmenteA runbook you want to run locally
  • Runbook principalParent runbook

Para interactuar con máquinas que no sean de Azure, se ejecuta un runbook principal en el contexto de Azure.To interact with Non-Azure machines, a parent runbook is run in the Azure context. Este runbook llama a un runbook secundario con el cmdlet Start-AzureRmAutomationRunbook.This runbook calls a child runbook with the Start-AzureRmAutomationRunbook cmdlet. Debe especificar el parámetro -RunOn y proporcionar el nombre de la instancia de Hybrid Runbook Worker para que el script se ejecute.You must specify the -RunOn parameter and provide the name of the Hybrid Runbook Worker for the script to run on. Para un ejemplo de cómo hacerlo, consulte el ejemplo de runbook Update Management - Run Script Locally (Update Management: ejecución de scripts de forma local).For an example of how to do this, see the runbook example Update Management - Run Script Locally.

Acerca de la implementación de revisionesAbort patch deployment

Si el script previo devuelve un error, es posible que quiera anular la implementación.If your pre script returns an error, you may want to abort your deployment. Para ello, debe generar un error en el script en cualquier lógica que implique un error.To do this, you must throw an error in your script for any logic that would constitute a failure.

if (<My custom error logic>)
{
    #Throw an error to fail the patch deployment.  
    throw "There was an error, abort deployment"
}

Problemas conocidosKnown issues

  • No se pueden pasar valores booleanos, objetos ni matrices a parámetros al usar los scripts previos y posteriores.You can't pass a boolean, objects, or arrays to parameters when using pre and post scripts. Se producirá un error en el runbook.The runbook will fail. Para una lista completa de los tipos compatibles, consulte los parámetros.For a complete list of supported types, see parameters.

Pasos siguientesNext steps

Continúe con el tutorial para aprender a administrar actualizaciones de máquinas virtuales Windows.Continue to the tutorial to learn how to manage updates for your Windows virtual machines.