Mi primer runbook de PowerShellMy first PowerShell runbook

Este tutorial le guiará por la creación de un Runbook de PowerShell en Azure Automation.This tutorial walks you through the creation of a PowerShell runbook in Azure Automation. Empezará con un runbook sencillo que probará y publicará, y aprenderá a hacer un seguimiento de estado del trabajo del runbook.You start with a simple runbook that you test and publish while you learn how to track the status of the runbook job. A continuación, puede modificar el runbook para administrar recursos de Azure, en este caso, iniciar una máquina virtual de Azure.Then you modify the runbook to actually manage Azure resources, in this case starting an Azure virtual machine. Para finalizar, agregará parámetros de runbook para que el runbook sea más robusto.Lastly, you make the runbook more robust by adding runbook parameters.

PrerequisitesPrerequisites

Para completar este tutorial, debe cumplir los siguientes requisitos previos:To complete this tutorial, you need the following prerequisites:

Creación de un runbookCreate new runbook

Empieza creando un runbook simple cuya salida sea el texto Hola mundo.You start by creating a simple runbook that outputs the text Hello World.

  1. En Azure Portal, abra su cuenta de Automation.In the Azure portal, open your Automation account.
  2. Haga clic en Runbooks (en Automatización de procesos) para abrir la lista de runbooks.Click Runbooks under Process Automation to open the list of runbooks.
  3. Para crear un runbook, haga clic en el botón + Agregar un runbook y en Crear un runbook nuevo.Create a new runbook by clicking the + Add a runbook button and then Create a new runbook.
  4. Asigne al Runbook el nombre MyFirstRunbook-PowerShell.Give the runbook the name MyFirstRunbook-PowerShell.
  5. En este caso, va a crear un runbook de PowerShell, por tanto, seleccione Powershell como Tipo de Runbook.In this case, you're going to create a PowerShell runbook so select Powershell for Runbook type.
  6. Haga clic en Crear para crear el runbook y abra el editor de texto.Click Create to create the runbook and open the textual editor.

Agregar código al runbookAdd code to the runbook

Puede escribir el código directamente en el runbook o seleccionar los cmdlets, runbooks y recursos desde el control Biblioteca y agregarlos al runbook con los parámetros relacionados.You can either type code directly into the runbook, or you can select cmdlets, runbooks, and assets from the Library control and have them added to the runbook with any related parameters. En este tutorial, escribirá directamente en el runbook.For this walkthrough, you type directly in the runbook.

  1. El runbook ahora está vacío, escriba Write-Output "Hola mundo" .Your runbook is currently empty, type Write-Output "Hello World." en el cuerpo del script.in the body of the script.

    Hola mundo

  2. Guarde el Runbook, para lo que debe hacer clic en Guardar.Save the runbook by clicking Save.

Prueba del runbook Test the runbook

Antes de publicar el runbook para que esté disponible en producción, puede que quiera probarlo para asegurarse de que funciona correctamente.Before you publish the runbook to make it available in production, you want to test it to make sure that it works properly. Cuando se prueba un runbook, se ejecuta su versión Borrador y se visualizan sus resultados de forma interactiva.When you test a runbook, you run its Draft version and view its output interactively.

  1. Haga clic en Panel Prueba para abrir el panel de prueba.Click Test pane to open the Test pane.

  2. Haga clic en Iniciar para iniciar la prueba.Click Start to start the test. Esta debe ser la única opción habilitada.This should be the only enabled option.

  3. Se crea un trabajo de runbook y se muestra su estado.A runbook job is created and its status displayed.

    El estado del trabajo se inicia como En cola, lo que indica que está esperando que haya disponible un trabajo de runbook en la nube.The job status starts as Queued indicating that it's waiting for a runbook worker in the cloud to come available. Su estado cambia a Iniciando cuando un trabajo de runbook solicita el trabajo. Cuando el runbook comienza a ejecutarse realmente, el estado es En ejecución.It moves to Starting when a worker claims the job, and then Running when the runbook actually starts running.

  4. Cuando se complete el trabajo del runbook, se mostrará su resultado.When the runbook job completes, its output is displayed. En este caso, debería ver Hola mundo.In your case, you should see Hello World.

    Salida del panel de prueba

  5. Cierre el panel Prueba para volver al lienzo.Close the Test pane to return to the canvas.

Publicar e iniciar el runbookPublish and start the runbook

El runbook que acaba de crear aún está en modo de borrador.The runbook that you created is still in Draft mode. Debe publicarse antes de ejecutarlo en producción.It must be published before you can run it in production. Al publicar un runbook, se sobrescribe la versión publicada existente con la versión de borrador.When you publish a runbook, you overwrite the existing Published version with the Draft version. En este caso, no tiene una versión publicada aún porque acaba de crear el runbook.In your case, you don't have a Published version yet because you just created the runbook.

  1. Haga clic en Publicar para publicar el runbook y en cuando se le solicite.Click Publish to publish the runbook and then Yes when prompted.

  2. Si se desplaza a la izquierda para ver el runbook en el panel Runbooks, se muestra Publicado en Estado de creación.If you scroll left to view the runbook in the Runbooks pane now, it shows an Authoring Status of Published.

  3. Desplácese de nuevo a la derecha para ver el panel de MyFirstRunbook-PowerShell.Scroll back to the right to view the pane for MyFirstRunbook-PowerShell. Las opciones en la parte superior nos permiten iniciar el runbook, verlo, programarlo para que se inicie en algún momento en el futuro o crear un webhook para que se inicie a través de una llamada HTTP.The options across the top allow us to start the runbook, view the runbook, schedule it to start at some time in the future, or create a webhook so it can be started through an HTTP call.

  4. Para iniciar el runbook, haga clic en Iniciar y en Aceptar cuando se abra la página Iniciar runbook.You want to start the runbook, so click Start and then click Ok when the Start Runbook page opens.

  5. Se abre un panel de trabajo para el trabajo del runbook que acaba de crear.A job page is opened for the runbook job that you created. Puede cerrar este panel, pero en este caso déjelo abierto para que pueda ver el progreso del trabajo.You can close this pane, but in this case you leave it open so you can watch the job's progress.

  6. El estado del trabajo se muestra en Resumen del trabajo y coincide con los estados que vio cuando probó el runbook.The job status is shown in Job Summary and matches the statuses that you saw when you tested the runbook.

    Resumen del trabajo

  7. Cuando el estado del runbook aparezca como Completado, en Introducción, haga clic en Salida.Once the runbook status shows Completed, under Overview click Output. Se abre el panel Salida y puede ver Hola mundo.The Output pane is opened, and you can see your Hello World.

    Salida del trabajo

  8. Cierre la página Salida.Close the Output page.

  9. Haga clic en Todos los registros para abrir el panel Transmisiones para el trabajo de Runbook.Click All Logs to open the Streams pane for the runbook job. Solo debería ver Hola mundo en el flujo de salida, pero se pueden mostrar otras transmisiones de un trabajo de runbook como Detallado y Error si el runbook escribe en ellas.You should only see Hello World in the output stream, but this output can show other streams for a runbook job such as Verbose and Error if the runbook writes to them.

    Todos los registros

  10. Cierre la página Flujos y la del trabajo para volver a la página MyFirstRunbook-PowerShell.Close the Streams page and the Job page to return to the MyFirstRunbook-PowerShell page.

  11. En Detalles, haga clic en Trabajos para abrir el panel Trabajos de este runbook.Under Details, click Jobs to open the Jobs pane for this runbook. Esta página enumera todos los trabajos creados por este runbook.This page lists all of the jobs created by this runbook. Solo debería ver un trabajo en la lista ya que solo ejecutó el trabajo una vez.You should only see one job listed since you only ran the job once.

    Lista de trabajos

  12. Puede hacer clic en este trabajo para abrir el mismo panel Trabajo que vio cuando se inició el runbook.You can click this job to open the same Job pane that you viewed when you started the runbook. Esta acción permite volver atrás en el tiempo y ver los detalles de cualquier trabajo que se creó para un runbook determinado.This action allows you to go back in time and view the details of any job that was created for a particular runbook.

Agregar autenticación para administrar recursos de AzureAdd authentication to manage Azure resources

Ha probado y publicado su runbook, pero hasta ahora no hace nada útil.You've tested and published your runbook, but so far it doesn't do anything useful. Quiere que administre recursos de Azure.You want to have it manage Azure resources. No puede hacerlo, a menos que se autentique con una conexión de ejecución que se cree automáticamente cuando se crea la cuenta de Automation.It is not able to do that though unless You have it authenticate using a Run As connection that is automatically created when you create your automation account. Use la conexión de ejecución con el cmdlet Connect-AzureRmAccount.You use the Run As connection with the Connect-AzureRmAccount cmdlet. Si va a administrar recursos en varias suscripciones, debe usar el parámetro -AzureRmContext junto con Get-AzureRmContext.If you are managing resources across multiple subscriptions, you need to use the -AzureRmContext parameter along with Get-AzureRmContext.

# Ensures you do not inherit an AzureRMContext in your runbook
Disable-AzureRmContextAutosave –Scope Process

$connection = Get-AutomationConnection -Name AzureRunAsConnection

# Wrap authentication in retry logic for transient network failures
$logonAttempt = 0
while(!($connectionResult) -And ($logonAttempt -le 10))
{
    $LogonAttempt++
    # Logging in to Azure...
    $connectionResult =    Connect-AzureRmAccount `
                               -ServicePrincipal `
                               -Tenant $connection.TenantID `
                               -ApplicationID $connection.ApplicationID `
                               -CertificateThumbprint $connection.CertificateThumbprint

    Start-Sleep -Seconds 30
}

$AzureContext = Select-AzureRmSubscription -SubscriptionId $connection.SubscriptionID

Get-AzureRmVM -ResourceGroupName myResourceGroup -AzureRmContext $AzureContext
  1. Haga clic en Editar en la página MyFirstRunbook-PowerShell para abrir el editor de texto.Open the textual editor by clicking Edit on the MyFirstRunbook-PowerShell page.

  2. Ya no necesita la línea Write-Output, así que elimínela.You don't need the Write-Output line anymore, so go ahead and delete it.

  3. Escriba o copie y pegue el siguiente código que controla la autenticación con la cuenta de ejecución de Automation:Type or copy and paste the following code that handles the authentication with your Automation Run As account:

    # Ensures you do not inherit an AzureRMContext in your runbook
    Disable-AzureRmContextAutosave –Scope Process
    
    $connection = Get-AutomationConnection -Name AzureRunAsConnection
    
    while(!($connectionResult) -And ($logonAttempt -le 10))
    {
        $LogonAttempt++
        # Logging in to Azure...
        $connectionResult =    Connect-AzureRmAccount `
                                   -ServicePrincipal `
                                   -Tenant $connection.TenantID `
                                   -ApplicationID $connection.ApplicationID `
                                   -CertificateThumbprint $connection.CertificateThumbprint
    
        Start-Sleep -Seconds 30
    }
    

    Importante

    Add-AzureRmAccount y Login-AzureRmAccount ahora son alias de Connect-AzureRMAccount.Add-AzureRmAccount and Login-AzureRmAccount are now aliases for Connect-AzureRMAccount. Si el cmdlet Connect-AzureRMAccount no existe, puede usar Add-AzureRmAccount o Login-AzureRmAccount, o bien puede actualizar los módulos de su cuenta de Automation a las versiones más recientes.If the Connect-AzureRMAccount cmdlet does not exist, you can use Add-AzureRmAccount or Login-AzureRmAccount, or you can update your modules in your Automation Account to the latest versions.

  4. Haga clic en el panel de prueba para poder probar el runbook.Click Test pane so that you can test the runbook.

  5. Haga clic en Iniciar para iniciar la prueba.Click Start to start the test. Cuando termine, recibirá unos resultados similares a los siguientes, que muestran información básica de su cuenta.Once it completes, you should receive output similar to the following, displaying basic information from your account. Esta salida confirma que la cuenta de ejecución es válida.This output confirms that the Run As Account is valid.

    Authenticate

Incorporación de código para iniciar una máquina virtualAdd code to start a virtual machine

Ahora que el runbook está autenticado en la suscripción a Azure, puede administrar los recursos.Now that your runbook is authenticating to your Azure subscription, you can manage resources. Agregue un comando para iniciar una máquina virtual.You add a command to start a virtual machine. Puede seleccionar cualquier máquina virtual de la suscripción de Azure. Por ahora, codificará ese nombre directamente en el runbook.You can pick any virtual machine in your Azure subscription, and for now you hardcode that name in the runbook.

  1. Tras Connect-AzureRmAccount, escriba Start-AzureRmVM -Name "NombreVM" -ResourceGroupName "NombreGrupoRecursos" y proporcione el nombre y el nombre del grupo de recursos de la máquina virtual que quiere iniciar.After Connect-AzureRmAccount, type Start-AzureRmVM -Name 'VMName' -ResourceGroupName 'NameofResourceGroup' providing the name and Resource Group name of the virtual machine to start.

    # Ensures you do not inherit an AzureRMContext in your runbook
    Disable-AzureRmContextAutosave –Scope Process
    
    $connection = Get-AutomationConnection -Name AzureRunAsConnection
    while(!($connectionResult) -And ($logonAttempt -le 10))
    {
        $LogonAttempt++
        # Logging in to Azure...
        $connectionResult =    Connect-AzureRmAccount `
                                   -ServicePrincipal `
                                   -Tenant $connection.TenantID `
                                   -ApplicationID $connection.ApplicationID `
                                   -CertificateThumbprint $connection.CertificateThumbprint
    
        Start-Sleep -Seconds 30
    }
    
    Start-AzureRmVM -Name 'VMName' -ResourceGroupName 'ResourceGroupName'
    
  2. Guarde el runbook y haga clic en Panel de prueba para probarlo.Save the runbook and then click Test pane so that you can test it.

  3. Haga clic en Iniciar para iniciar la prueba.Click Start to start the test. Cuando haya terminado, compruebe que la máquina virtual se ha iniciado.Once it completes, check that the virtual machine was started.

Incorporación de un parámetro de entradaAdd an input parameter

Actualmente, el runbook inicia la máquina virtual que codificó directamente en el runbook, pero el runbook sería más útil si especificara la máquina virtual al iniciar el runbook.Your runbook currently starts the virtual machine that you hardcoded in the runbook, but it would be more useful if you specify the virtual machine when the runbook is started. Agregue parámetros de entrada al runbook para proporcionar esa funcionalidad.You add input parameters to the runbook to provide that functionality.

  1. Agregue parámetros para VMName y ResourceGroupName al runbook y use estas variables con el cmdlet Start-AzureRmVM como se muestra en el siguiente ejemplo.Add parameters for VMName and ResourceGroupName to the runbook and use these variables with the Start-AzureRmVM cmdlet as in the following example.

    Param(
     [string]$VMName,
     [string]$ResourceGroupName
    )
    # Ensures you do not inherit an AzureRMContext in your runbook
    Disable-AzureRmContextAutosave –Scope Process
    
    $connection = Get-AutomationConnection -Name AzureRunAsConnection
    while(!($connectionResult) -And ($logonAttempt -le 10))
    {
        $LogonAttempt++
        # Logging in to Azure...
        $connectionResult =    Connect-AzureRmAccount `
                                   -ServicePrincipal `
                                   -Tenant $connection.TenantID `
                                   -ApplicationID $connection.ApplicationID `
                                   -CertificateThumbprint $connection.CertificateThumbprint
    
        Start-Sleep -Seconds 30
    }
    
    Start-AzureRmVM -Name $VMName -ResourceGroupName $ResourceGroupName
    
  2. Guarde el runbook y abra el panel Prueba.Save the runbook and open the Test pane. Ahora puede proporcionar valores para las dos variables de entrada que se usarán en la prueba.You can now provide values for the two input variables that are used in the test.

  3. Cierre el panel Prueba.Close the Test pane.

  4. Haga clic en Publicar para publicar la nueva versión del runbook.Click Publish to publish the new version of the runbook.

  5. Detenga la máquina virtual que inició en el paso anterior.Stop the virtual machine that you started in the previous step.

  6. Haga clic en Aceptar para iniciar el runbook.Click OK to start the runbook. Escriba el valor de VMName y ResourceGroupName para la máquina virtual que va a iniciar.Type in the VMName and ResourceGroupName for the virtual machine that you're going to start.

    Pasar parámetroPass Parameter

  7. Cuando se complete el runbook, compruebe que la máquina virtual se ha iniciado.When the runbook completes, check that the virtual machine was started.

Diferencias del flujo de trabajo de PowerShellDifferences from PowerShell Workflow

Los runbooks de PowerShell tienen el mismo ciclo de vida, las mismas funcionalidades y la misma administración que los runbooks de flujo de trabajo de PowerShell, pero existen algunas diferencias y limitaciones:PowerShell runbooks have the same lifecycle, capabilities, and management as PowerShell Workflow runbooks but there are some differences and limitations:

  1. Los runbooks de PowerShell se ejecutan más rápido en comparación con los runbooks de flujo de trabajo de PowerShell, pues estos no tienen paso de compilación.PowerShell runbooks run fast compared to PowerShell Workflow runbooks as they don’t have compilation step.
  2. Los runbooks de flujo de trabajo de PowerShell admiten los puntos de control y su uso. Los runbooks de flujo de trabajo de PowerShell pueden reanudarse desde cualquier punto en el runbook.PowerShell Workflow runbooks support checkpoints, using checkpoints, PowerShell Workflow runbooks can resume from any point in the runbook. Los runbooks de PowerShell solo se pueden reanudar desde el principio.PowerShell runbooks can only resume from the beginning.
  3. Los runbooks de flujo de trabajo de PowerShell admiten la ejecución en serie y en paralelo.PowerShell Workflow runbooks support parallel and serial execution. Los runbooks de PowerShell solo pueden ejecutar comandos en serie.PowerShell runbooks can only execute commands serially.
  4. En un runbook de flujo de trabajo de PowerShell, una actividad, un comando o un bloque de scripts pueden tener su propio espacio de ejecución.In a PowerShell Workflow runbook, an activity, a command, or a script block can have its own runspace. En un runbook de PowerShell, todo el contenido de un script se ejecuta en un único espacio de ejecución.In a PowerShell runbook, everything in a script runs in a single runspace. También se observan algunas diferencias sintácticas entre un runbook de PowerShell nativo y un runbook de flujo de trabajo de PowerShell.There are also some syntactic differences between a native PowerShell runbook and a PowerShell Workflow runbook.

Pasos siguientesNext steps