Conceptos de flujo de trabajo de Windows PowerShellWindows PowerShell Workflow Concepts

Se aplica a: Paquete de Windows Azure para Windows Server, System Center 2016 - Service Management AutomationApplies To: Windows Azure Pack for Windows Server, System Center 2016 - Service Management Automation

Una tipo de runbook para Service Management Automation se basa en flujos de trabajo de Windows PowerShell.One type of runbook for Service Management Automation is based on Windows PowerShell Workflows. Esta sección proporciona una breve descripción de las características más importantes de flujos de trabajo que son comunes a los runbooks de automatización.This section provides a brief overview of critical features of workflows that are common to Automation runbooks. Encontrará información detallada y completa sobre los flujos de trabajo en Introducción al flujo de trabajo de Windows PowerShell.Complete details on workflows are available in Getting Started with Windows PowerShell Workflow.

La estructura de los runbooks es idéntica entre los runbooks para Service Management Automation y Microsoft Azure Automation aunque los dos normalmente trabajará con distintos recursos.The runbook structure is identical between runbooks for Service Management Automation and for Microsoft Azure Automation although the two will typically work with different resources.

Flujos de trabajo de Windows PowerShellWindows PowerShell Workflows

Un flujo de trabajo es una secuencia de pasos programados y conectados que realizan tareas de larga duración o que requieren la coordinación de varios pasos en varios dispositivos o nodos administrados.A workflow is a sequence of programmed, connected steps that perform long-running tasks or require the coordination of multiple steps across multiple devices or managed nodes. Las ventajas que ofrece un flujo de trabajo con respecto a un script normal son la capacidad de realizar una acción simultáneamente en varios dispositivos y la capacidad de recuperarse automáticamente de los errores.The benefits of a workflow over a normal script include the ability to simultaneously perform an action against multiple devices and the ability to automatically recover from failures. Un flujo de trabajo de Windows PowerShell es un script de Windows PowerShell que aprovecha Windows Workflow Foundation.A Windows PowerShell Workflow is a Windows PowerShell script that leverages Windows Workflow Foundation. Aunque el flujo de trabajo está escrito con la sintaxis de Windows PowerShell y se inicia mediante Windows PowerShell, se procesa mediante Windows Workflow Foundation.While the workflow is written with Windows PowerShell syntax and launched by Windows PowerShell, it is processed by Windows Workflow Foundation.

Estructura básicaBasic Structure

Inicia un flujo de trabajo de Windows PowerShell con la flujo de trabajo palabra clave seguido por el cuerpo de la secuencia de comandos entre llaves.A Windows PowerShell Workflow starts with the Workflow keyword followed by the body of the script enclosed in braces. El nombre del flujo de trabajo sigue el flujo de trabajo palabra clave tal y como se muestra en la siguiente sintaxis.The name of the workflow follows the Workflow keyword as shown in the following syntax. El nombre del flujo de trabajo coincide con el nombre de runbook de automatización.The name of the workflow matches the name of the Automation runbook.

Workflow Test-Runbook
{
   <Commands>
}

Para agregar parámetros al flujo de trabajo, use la Param palabra clave tal y como se muestra en la siguiente sintaxis.To add parameters to the workflow, use the Param keyword as shown in the following syntax. El portal de administración solicitará al usuario que indique los valores para estos parámetros cuando inicie el runbook.The management Portal will prompt the user to provide values for these parameters when they start the runbook. En este ejemplo se usa el atributo Parameter opcional, que especifica si el parámetro es obligatorio.This sample uses the optional Parameter attribute which specifies whether or not the parameter is mandatory.

Workflow Test-Runbook
{
  Param
  (
   [Parameter(Mandatory=<$True | $False>]
   [Type]$<ParameterName>,

   [Parameter(Mandatory=<$True | $False>]
   [Type]$<ParameterName>
  )
  <Commands>
}

NomenclaturaNaming

El nombre del flujo de trabajo debe ajustarse al formato verbo-sustantivo estándar en Windows PowerShell.The name of the workflow should conform to the Verb-Noun format that is standard with Windows PowerShell. Para obtener una lista de los verbos aprobados que se pueden usar, vea Approved Verbs for Windows PowerShell Commands (Verbos aprobados para los comandos de Windows PowerShell) .You can refer to Approved Verbs for Windows PowerShell Commands for a list of approved verbs to use. El nombre del flujo de trabajo debe coincidir con el nombre de runbook de automatización.The name of the workflow must match the name of the Automation runbook. Si el Runbook se va a importar, el nombre de archivo debe coincidir con el nombre del flujo de trabajo y terminar en .ps1.If the runbook is being imported, then the filename must match the workflow name and must end in .ps1.

LimitacionesLimitations

Para obtener una lista completa de limitaciones y diferencias de sintaxis entre flujos de trabajo de Windows PowerShell y Windows PowerShell, consulte Diferencias sintácticas entre los flujos de trabajo de scripts y los scripts.For a complete list of limitations and syntax differences between Windows PowerShell Workflows and Windows PowerShell, see Syntactic Differences Between Script Workflows and Scripts.

ActividadesActivities

Una actividad es una tarea específica en un flujo de trabajo.An activity is a specific task in a workflow. Del mismo modo que un script se compone de uno o varios comandos, un flujo de trabajo se compone de una o varias actividades que se realizan en una secuencia.Just as a script is composed of one or more commands, a workflow is composed of one or more activities that are carried out in a sequence. El flujo de trabajo de Windows PowerShell convierte automáticamente muchos de los cmdlets de Windows PowerShell en actividades cuando se ejecuta un flujo de trabajo.Windows PowerShell Workflow automatically converts many of the Windows PowerShell cmdlets to activities when it runs a workflow. Cuando especifica uno de estos cmdlets en el Runbook, en realidad la actividad correspondiente se ejecuta mediante Windows Workflow Foundation.When you specify one of these cmdlets in your runbook, the corresponding activity is actually run by Windows Workflow Foundation. Para los cmdlets sin una actividad correspondiente, el flujo de trabajo de Windows PowerShell ejecuta automáticamente el cmdlet dentro de un InlineScript actividad.For those cmdlets without a corresponding activity, Windows PowerShell Workflow automatically runs the cmdlet within an InlineScript activity. Hay un conjunto de cmdlets que se excluye y no se puede usar en un flujo de trabajo a menos que se incluya explícitamente en un InlineScript bloque.There is a set of cmdlets that are excluded and cannot be used in a workflow unless you explicitly include them in an InlineScript block. Para obtener más detalles sobre estos conceptos, vea Using Activities in Script Workflows (Uso de actividades en flujos de trabajo de scripts).For further details on these concepts, see Using Activities in Script Workflows.

Las actividades de flujo de trabajo comparten un conjunto de parámetros comunes para configurar su funcionamiento.Workflow activities share a set of common parameters to configure their operation. Para obtener más información acerca de los parámetros comunes del flujo de trabajo, vea about_WorkflowCommonParameters (Acerca de los parámetros comunes del flujo de trabajo).For details about the workflow common parameters, see about_WorkflowCommonParameters.

Módulos de integraciónIntegration Modules

Un módulo de integración es un paquete que contiene un módulo de Windows PowerShell y puede importarse en automatización.An Integration Module is a package that contains a Windows PowerShell Module and can be imported into Automation. Módulos de Windows PowerShell contienen cmdlets que puede usarse en runbooks de automatización.Windows PowerShell Modules contain cmdlets that can be used in Automation runbooks. Algunos productos y servicios, como Operations Manager y Azure, cuentan con módulos que incluyen cmdlets específicos para su funcionamiento.Products and services such as Operations Manager and Azure have modules that include cmdlets specific to their operation.

Módulos de integración que se importan en la automatización están automáticamente disponibles para todos los runbooks.Integration Modules that are imported into Automation are automatically available to all runbooks. Puesto que la automatización se basa en Windows PowerShell 4.0, admite la carga automática de módulos, lo que significa que puede usar cmdlets de módulos instalados sin importarlos en la secuencia de comandos con Import-Module.Since Automation is based on Windows PowerShell 4.0, it supports auto loading of modules meaning that cmdlets from installed modules can be used without importing them into the script with Import-Module.

Cualquier módulo de Windows PowerShell puede importarse en automatización siempre que todas sus dependencias pueden encontrarse en una sola carpeta.Any Windows PowerShell module can be imported into Automation as long as all of its dependencies can be located in a single folder. Si el módulo depende de la configuración del registro o archivos no están en la ruta de acceso de manera predeterminada, a continuación, se puede importar, pero lo más probable es que no funcionará porque automatización no podrá encontrar sus dependencias.If the module depends on registry settings or files not in the default path, then it can be imported, but it will most likely not work because Automation will not be able to locate its dependencies. Módulos con dependencias externas pueden utilizarse en un runbook mediante su instalación en otro host y, a continuación, obtener acceso a ellos con un InlineScript bloque de script.Modules with external dependencies can be used in a runbook by installing them on another host using and then accessing them with an InlineScript script block.

Con la automatización de administración de servicio, puede usar módulos con dependencias externas, instálelos en cada servidor Worker.With Service Management Automation, you can use modules with external dependencies by installing them on each Worker server. Mientras que los cmdlets en estos módulos puede usarse en runbooks, no se detectará la automatización para admitir características tales como el Asistente para actividad de inserción.While the cmdlets in these modules can be used in runbooks, they will not be discovered by Automation to support such features as the Insert Activity wizard. Para poder usar esta característica, puede crear un módulo portátil mediante el cmdlet New-SmaPortableModule .In order to use this feature, you can create a Portable module using the New-SmaPortableModule cmdlet. Este cmdlet crea un módulo que incluye un código auxiliar para cada uno de sus cmdlets y puede importarse en automatización.This cmdlet creates a module that includes a stub for each of its cmdlets and can be imported into Automation. Cuando un Runbook usa uno de estos cmdlets, el código auxiliar redirige la llamada al propio cmdlet en el módulo externo.When a runbook uses one of those cmdlets, the stub redirects the call to the actual cmdlet in the external module. Ese módulo debe estar instalado en cada servidor Worker o se producirá un error en la llamada.That module must be installed on each Worker server or the call will fail.

Ejecución en paraleloParallel Execution

Una ventaja que presentan los flujos de trabajo de Windows PowerShell es la capacidad de ejecutar un conjunto de comandos en paralelo en lugar de hacerlo secuencialmente como con un script típico.One advantage of Windows PowerShell Workflows is the ability to perform a set of commands in parallel instead of sequentially as with a typical script. Esto resulta particularmente útil en los Runbooks, ya que es posible que ejecuten varias acciones que tardan mucho tiempo en completarse.This is particularly useful in runbooks since they may perform multiple actions that take a significant time to complete. Por ejemplo, supongamos que usa un Runbook para aprovisionar un conjunto de máquinas virtuales.For example, a runbook might provision a set of virtual machines. En lugar de realizar cada proceso de aprovisionamiento de manera secuencial, las acciones se pueden realizar simultáneamente, lo que mejora la eficiencia general.Rather than performing each provisioning process in sequence with one another, the actions could be performed simultaneously increasing overall efficiency. El Runbook continuará únicamente cuando todas las acciones se hayan completado.Only when all are complete would the runbook continue.

Puede usar el paralelo palabra clave que se va a crear un bloque de script con varios comandos que se ejecutarán simultáneamente.You can use the Parallel keyword to create a script block with multiple commands that will run concurrently. Para ello se usa la sintaxis que se muestra a continuación.This uses the syntax shown below. En este caso, se iniciará Activity1 y Activity2 al mismo tiempo.In this case, Activity1 and Activity2 will start at the same time. Solo se iniciará Activity3 después de que se hayan completado Activity1 y Activity2.Activity3 will start only after both Activity1 and Activity2 have completed.

Parallel
{
  <Activity1>
  <Activity2>
}
<Activity3>

Puede usar el ForEach-Parallel construcción a los comandos de proceso para cada elemento de una colección simultáneamente.You can use the ForEach -Parallel construct to process commands for each item in a collection concurrently. Los elementos de la colección se procesan en paralelo, mientras que los comandos del bloque de script se ejecutan secuencialmente.The items in the collection are processed in parallel while the commands in the script block run sequentially. Para ello se usa la sintaxis que se muestra a continuación.This uses the syntax shown below. En este caso, Activity1 se iniciará al mismo tiempo para todos los elementos de la colección.In this case, Activity1 will start at the same time for all items in the collection. Para cada elemento, Activity2 se iniciará una vez que se haya completado Activity1.For each item, Activity2 will start after Activity1 is complete. Solo se iniciará Activity3 después de que se hayan completado Activity1 y Activity2 para todos los elementos.Activity3 will start only after both Activity1 and Activity2 have completed for all items.

ForEach -Parallel ($<item> in $<collection>)
{
  <Activity1>
  <Activity2>
}
<Activity3>

El secuencia palabra clave se utiliza para ejecutar comandos en secuencia dentro de un paralelo bloque de script.The Sequence keyword is used to run commands in sequence within a Parallel script block. El secuencia bloque de script se ejecuta en paralelo con otros comandos, pero los comandos dentro del bloque se ejecutan secuencialmente.The Sequence script block runs in parallel with other commands, but the commands within the block run sequentially. Para ello se usa la sintaxis que se muestra a continuación.This uses the syntax shown below. En este caso, Activity1, Activity2 y Activity3 se iniciarán al mismo tiempo.In this case, Activity1, Activity2, and Activity3 will start at the same time. Activity4 solo se iniciará después de que Activity3 se haya completado.Activity4 will start only after Activity3 has completed. Activity5 se iniciará después de que se hayan completado todas las demás actividades.Activity5 will start after all other activities have completed

Parallel
{
  <Activity1>
  <Activity2>

  Sequence
  {
   <Activity3>
   <Activity4>
  }
}
<Activity5>

Puntos de controlCheckpoints

Un punto de control es una instantánea del estado actual del flujo de trabajo que incluye el valor actual de las variables y todos los resultados generados para ese punto.A checkpoint is a snapshot of the current state of the workflow that includes the current value for variables and any output generated to that point. El último punto de comprobación para completar en un runbook se guarda en la base de datos de automatización para que el flujo de trabajo puede reanudarse incluso en el caso de una interrupción.The last checkpoint to complete in a runbook is saved to the Automation database so that the workflow can resume even in the case of an outage. Los datos del punto de control se eliminan una vez finalizado el trabajo del Runbook.The checkpoint data is removed once the runbook job is complete.

Puede establecer un punto de control en un flujo de trabajo con la actividad Checkpoint-Workflow .You can set a checkpoint in a workflow with the Checkpoint-Workflow activity. Al incluir esta actividad en un Runbook, inmediatamente se toma un punto de control.When you include this activity in a runbook, a checkpoint is immediately taken. Si el Runbook se suspende debido a un error, cuando se reanude el trabajo, se reanudará desde el punto del último punto de control establecido.If the runbook is suspended by an error, when the job is resumed, it will resume from the point of the last checkpoint set.

En el ejemplo de código siguiente, se produce un error después de Activity2 que provoca que se suspenda el Runbook.In the following sample code, an error occurs after Activity2 causing the runbook to suspend. Cuando se reanuda el trabajo, se inicia ejecutando Activity2, ya que se encontraba justo detrás del último punto de control establecido.When the job is resumed, it starts by running Activity2 since this was just after the last checkpoint set.

<Activity1>
Checkpoint-Workflow
<Activity2>
<Error>
<Activity3>

Se recomienda establecer los puntos de control en un Runbook justo después de actividades que puedan ser propensas a error y que no deban repetirse si se reanuda el Runbook.You should set checkpoints in a runbook after activities that may be prone to error and should not be repeated if the runbook is resumed. Por ejemplo, supongamos que usa un Runbook para crear una máquina virtual.For example, your runbook may create a virtual machine. Podría establecer un punto de control antes y después de los comandos que crean la máquina virtual.You could set a checkpoint both before and after the commands to create the virtual machine. Si se produce un error en la creación, los comandos se repiten cuando se reanuda el Runbook.If the creation fails, then the commands are repeated when the runbook is resumed. Si la creación se realiza correctamente, pero más adelante se produce un error en el Runbook, entonces la máquina virtual no se creará de nuevo cuando se reanude el Runbook.If the creation succeeds but the runbook later fails, then the virtual machine will not be created again when the runbook is resumed.

Para obtener más información sobre los puntos de control, vea Adding Checkpoints to a Script Workflow (Agregar puntos de control a un flujo de trabajo de script).For more information about checkpoints, see Adding Checkpoints to a Script Workflow.

Suspender un RunbookSuspending a Runbook

Puede forzar un runbook se suspenda a sí mismo con el Suspend-Workflow actividad.You can force a runbook to suspend itself with the Suspend-Workflow activity. Esta actividad establecerá un punto de control y hará que el flujo de trabajo se suspenda inmediatamente.This activity will set a checkpoint and cause the workflow to immediately suspend. Suspender el flujo de trabajo resulta útil para los runbooks que pueden requerir realizar un paso manualmente antes de ejecutar otro conjunto de actividades.Suspending a workflow is useful for runbooks that may require a manual step to be performed before another set of activities are run.

Para obtener más información sobre la suspensión de un flujo de trabajo, vea Making a Workflow Suspend Itself (Hacer que un flujo de trabajo se suspenda a sí mismo).For more information about suspending a workflow, see Making a Workflow Suspend Itself.

InlineScriptInlineScript

El InlineScript actividad se ejecuta un bloque de comandos en una sesión independiente y sin flujo de trabajo y devuelve su resultado al flujo de trabajo.The InlineScript activity runs a block of commands in a separate, non-workflow session and returns its output to the workflow. Mientras que los comandos de un flujo de trabajo se envían a Windows Workflow Foundation para su procesamiento, los comandos de un bloque de InlineScript se procesan mediante Windows PowerShell.While commands in a workflow are sent to Windows Workflow Foundation for processing, commands in an InlineScript block are processed by Windows PowerShell. La actividad usa los parámetros comunes de flujo de trabajo estándar incluido PSComputerName y PSCredential que le permiten especificar que el bloque de código se ejecute en otro equipo o con credenciales alternativas.The activity uses the standard workflow common parameters including PSComputerName and PSCredential which allow you to specify that the code block be run on another computer or using alternate credentials.

InlineScript usa la sintaxis que se muestra a continuación.InlineScript uses the syntax shown below.

InlineScript
{
  <Script Block>
} <Common Parameters>

El uso más común de InlineScript en un runbook es ejecutar un bloque de código en otro equipo.The most common use for InlineScript in a runbook is to run a block of code on another computer. Esto es necesario cuando no están instalados los cmdlets del runbook de automatización o si la acción solo tiene permisos para realizarse localmente en el equipo de destino.This is required when cmdlets in your runbook are not installed in Automation or if the action only has permissions to be performed locally on the target computer. Esto se ilustra en el diagrama siguiente.This is illustrated in the following diagram.

Diagrama de secuencia de comandos en línea

Para ejecutar el bloque de código en otro equipo, el PSComputer y PSCredential se usan parámetros con el InlineScript actividad.In order to run the code block on another computer, the PSComputer and PSCredential parameters are used with the InlineScript activity. Un recurso global, como un credencial o conexión se utiliza normalmente en un runbook para proporcionar valores para estos parámetros.A global resource such as a Credential or Connection is typically used in a runbook to provide values for these parameters. El siguiente código de ejemplo ejecuta un conjunto de comandos en un equipo representado por una conexión denominada MyConnection.The following sample code runs a set of commands on a computer represented by a connection called MyConnection.

$con = Get-AutomationConnection -Name 'MyConnection'
$securepassword = ConvertTo-SecureString -AsPlainText -String $con.Password -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $con.Username, $securepassword
InlineScript
{
  <Commands>
} "PSComputer $con.ComputerName "PSCredential $cred

Mientras InlineScript actividades pueden ser críticas en algunos runbooks, solo deben usarse cuando sea necesario por las razones siguientes:While InlineScript activities may be critical in certain runbooks, they should only be used when necessary for the following reasons:

  • No se puede usar puntos de control desde un InlineScript bloque.You cannot use checkpoints from within an InlineScript block. Si se produce un error dentro del bloque, se debe reanudar desde el principio.If a failure occurs within the block, it must be resumed from the beginning.

  • InlineScript afecta a la escalabilidad del runbook ya que retiene la sesión de Windows PowerShell para toda la longitud del bloque de InlineScript.InlineScript affects scalability of the runbook since it holds the Windows PowerShell session for the entire length of the InlineScript block.

  • Realizar actividades tales como Get-AutomationVariable y Get-AutomationPSCredential no están disponibles en un bloque de InlineScript.Activities such as Get-AutomationVariable and Get-AutomationPSCredential are not available in an InlineScript block.

Si necesita usar un InlineScript, debe minimizar su alcance.If you do need to use an InlineScript, you should minimize its scope. Por ejemplo, si su runbook recorre en iteración una colección mientras aplica la misma operación en cada elemento, el bucle debería producirse fuera de la InlineScript.For example, if your runbook iterates over a collection while applying the same operation to each item, the loop should occur outside of the InlineScript. Esto ofrecerá las siguientes ventajas:This will provide the following advantages:

  • Puede establecer un punto de control del flujo de trabajo después de cada iteración.You can checkpoint the workflow after each iteration. Si se suspende o se interrumpe el trabajo, y se reanuda, el bucle podrá reanudarse.If the job is suspended or interrupted and resumed, the loop will be able to resume.

  • Puede usar ForEach "paralelo para controlar los elementos de la colección simultáneamente.You can use ForEach "Parallel to handle collection items concurrently.

Las siguientes recomendaciones, tenga en cuenta si usa un InlineScript en su runbook:Keep the following recommendations in mind if you do use an InlineScript in your runbook:

  • No obstante, puede pasar valores al script mediante el modificador de ámbito $Using .You can pass values into the script though with the $Using scope modifier. Por ejemplo, una variable denominada $abc que se ha establecido fuera del InlineScript se convertiría en $using: abc dentro de un InlineScript.For example, a variable called $abc that has been set outside of the InlineScript would become $using:abc inside an InlineScript.

  • Para devolver una salida de un InlineScript, asigne el resultado a una variable y los datos que se devolverán al flujo de salida de salida.To return output from an InlineScript, assign the output to a variable and output any data to be returned to the output stream. En el ejemplo siguiente se asigna la cadena "Hola" a una variable denominada $output.The following example assigns the string "hi" to a variable called $output.

    $output = InlineScript { Write-Output "hi" }
    
  • Evite definir flujos de trabajo en InlineScript ámbito.Avoid defining workflows within InlineScript scope. Aunque puede parecer que algunos flujos de trabajo funcionan, no se ha probado.Even though some workflows may appear to operate correctly, this is not a tested scenario. Como resultado, puede que encuentre mensajes de error confusos o un funcionamiento inesperado.As a result, you may encounter confusing error messages or unexpected behavior.

Para obtener más información sobre el uso de InlineScript, consulte ejecutan comandos de Windows PowerShell en un flujo de trabajo y about_InlineScript.For further details on using InlineScript, see Running Windows PowerShell Commands in a Workflow and about_InlineScript.

Véase tambiénSee Also

Ejecución de un runbook en Service Management AutomationRunbook Execution in Service Management Automation

Creación de runbooks de AutomationAuthoring Automation Runbooks