about_Workflows

Descripción breve

Proporciona una breve introducción a la característica Flujo de trabajo de PowerShell.

Descripción larga

El flujo de trabajo de PowerShell aporta las ventajas de Windows Workflow Foundation a PowerShell y le permite escribir y ejecutar flujos de trabajo.

El flujo de trabajo de PowerShell se introdujo en PowerShell 3.0 y el módulo está disponible hasta PowerShell 5.1. Para obtener más información sobre el flujo de trabajo de PowerShell, consulte la Guía de flujos de trabajo y Escritura de un flujo de trabajo de Windows PowerShell.

Acerca de los flujos de trabajo

Los flujos de trabajo son comandos que constan de una secuencia ordenada de actividades relacionadas. Normalmente, se ejecutan durante un período de tiempo prolongado, recopilando datos de y realizando cambios en cientos de equipos, a menudo en entornos heterogéneos.

Los flujos de trabajo se pueden escribir en XAML, el lenguaje usado en Windows Workflow Foundation o en el lenguaje de PowerShell. Los flujos de trabajo normalmente se empaquetan en módulos e incluyen temas de ayuda. Para obtener más información, consulte Información general sobre XAML (WPF).

Los flujos de trabajo son críticos en un entorno de TI porque pueden sobrevivir a los reinicios y recuperarse automáticamente de errores comunes. Puede desconectar y volver a conectarse de sesiones y equipos que ejecutan flujos de trabajo sin interrumpir el procesamiento del flujo de trabajo y suspender y reanudar flujos de trabajo de forma transparente sin pérdida de datos. Cada actividad de un flujo de trabajo se puede registrar y auditar como referencia. Los flujos de trabajo se pueden ejecutar como trabajos y se pueden programar mediante la característica Trabajos programados de PowerShell.

El estado y los datos de un flujo de trabajo se guardan o se conservan al principio y al final del flujo de trabajo y en los puntos que especifique. Los puntos de persistencia de flujo de trabajo funcionan como instantáneas de base de datos o puntos de control de programa para proteger el flujo de trabajo frente a los efectos de las interrupciones y los errores. Si el flujo de trabajo no puede recuperarse de un error, puede usar los datos persistentes y reanudarse desde el último punto de persistencia, en lugar de volver a ejecutar un flujo de trabajo extenso desde el principio.

Requisitos y configuración del flujo de trabajo

Una configuración de flujo de trabajo de PowerShell consta de los siguientes elementos:

  • Un equipo cliente, que ejecuta el flujo de trabajo.
  • Una sesión de flujo de trabajo, PSSession, en el equipo cliente o en un equipo remoto.
  • Nodos administrados, los equipos de destino afectados por las actividades de flujo de trabajo.

La sesión de flujo de trabajo no es necesaria, pero se recomienda. PSSessions puede aprovechar las sólidas características de recuperación y sesiones desconectadas de PowerShell para recuperar sesiones de flujo de trabajo desconectadas. Para obtener más información, consulte about_Remote_Disconnected_Sessions

Dado que el equipo cliente y el equipo en el que se ejecuta la sesión de flujo de trabajo se pueden administrar nodos, puede ejecutar un flujo de trabajo en un único equipo que cumpla todos los roles.

El equipo cliente y el equipo en el que se ejecuta la sesión de flujo de trabajo deben ejecutar PowerShell 3.0. Se admiten todos los sistemas aptos, incluidas las opciones de instalación server Core de los sistemas operativos Windows Server.

Para ejecutar flujos de trabajo que incluyen cmdlets, los nodos administrados deben tener Windows PowerShell 2.0 o posterior. Los nodos administrados no requieren PowerShell a menos que el flujo de trabajo incluya cmdlets. Puede ejecutar flujos de trabajo que incluyan los comandos Instrumental de administración de Windows (WMI) y Common Information Model (CIM) en equipos que no tienen PowerShell.

Obtención de flujos de trabajo

Los flujos de trabajo normalmente se empaquetan en módulos. Para importar el módulo que incluye un flujo de trabajo, use cualquier comando del módulo o use el Import-Module cmdlet . Los módulos se importan automáticamente al primer uso de cualquier comando del módulo.

Para buscar los flujos de trabajo en los módulos instalados en el equipo, use el Get-Command parámetro CommandType del cmdlet.

Get-Command -CommandType Workflow

Ejecución de flujos de trabajo

Para ejecutar un flujo de trabajo, use el procedimiento siguiente.

  1. Cuando el nodo administrado es el equipo local, este paso no es necesario. De lo contrario, en el equipo cliente, inicie PowerShell con la opción Ejecutar como administrador.

    Start-Process PowerShell -Verb RunAs
    
  2. Habilite la comunicación remota de PowerShell en el equipo que ejecuta la sesión de flujo de trabajo y en los nodos administrados afectados por los flujos de trabajo que incluyen cmdlets.

    Solo tiene que realizar este paso una vez en cada equipo participante.

    Este paso solo es necesario cuando se ejecutan flujos de trabajo que incluyen cmdlets. No es necesario habilitar la comunicación remota en el equipo cliente, a menos que la sesión de flujos de trabajo se ejecute en el equipo cliente o en los nodos administrados que ejecutan PowerShell 3.0.

    Para habilitar la comunicación remota, use el Enable-PSRemoting cmdlet .

    Enable-PSRemoting -Force
    

    Puede habilitar la comunicación remota mediante la configuración Activar directiva de grupo de ejecución de scripts. Para obtener más información, consulte about_Group_Policy_Configuración y about_Execution_Policies.

  3. Use los New-PSWorkflowSession cmdlets o New-PSSession para crear la sesión de flujo de trabajo.

    El New-PSWorkflowSession cmdlet inicia una sesión que usa la configuración de sesión de Microsoft.PowerShell.Workflow integrada en el equipo de destino. Esta configuración de sesión incluye scripts, tipos y archivos de formato, y opciones diseñadas para flujos de trabajo.

    O bien, use el New-PSSession cmdlet . Use el parámetro ConfigurationName para especificar la configuración de sesión Microsoft.PowerShell.Workflow . Este comando es el mismo que el uso del New-PSWorkflowSession cmdlet .

    Una alternativa es usar el New-PSSession cmdlet . Use el parámetro ConfigurationName para especificar la configuración de sesión Microsoft.PowerShell.Workflow .

    En el equipo local:

    $ws = New-PSWorkflowSession
    

    En un equipo remoto:

    $ws = New-PSWorkflowSession -ComputerName Server01 `
    -Credential Domain01\Admin01
    

    Si es un Administración istrator en el equipo de sesión de flujo de trabajo, puede usar el New-PSWorkflowExecutionOption cmdlet para crear opciones personalizadas para la configuración de la sesión de flujo de trabajo. Además, use el Set-PSSessionConfiguration cmdlet para cambiar la configuración de sesión.

    $sto = New-PSWorkflowExecutionOption -MaxConnectedSessions 150
    Invoke-Command -ComputerName Server01 `
    {Set-PSSessionConfiguration Microsoft.PowerShell.Workflow `
    -SessionTypeOption $Using:sto}
    $ws = New-PSWorkflowSession -ComputerName Server01 `
    -Credential Domain01\Admin01
    
  4. Ejecute el flujo de trabajo en la sesión de flujo de trabajo. Para especificar los nombres de los nodos administrados, use el parámetro común psComputerName del flujo de trabajo.

    En los ejemplos siguientes se ejecuta el flujo de trabajo denominado Test-Workflow.

    Donde el nodo administrado es el equipo que hospeda la sesión de flujo de trabajo:

    Invoke-Command -Session $ws {Test-Workflow}
    

    Donde los nodos administrados son equipos remotos.

    Invoke-Command -Session $ws{
    Test-Workflow -PSComputerName Server01, Server02 }
    

    En el ejemplo siguiente se ejecuta en Test-Workflow cientos de equipos. El Get-Content cmdlet obtiene los nombres de equipo de un archivo de texto y los guarda en la $Servers variable del equipo local.

    Invoke-Command usa el $Using modificador de ámbito para definir la $Servers variable en la sesión local. Para obtener más información sobre el modificador de $Using ámbito, consulte about_Remote_Variables.

    $Servers = Get-Content Servers.txt
    Invoke-Command -Session $ws {Test-Workflow -PSComputerName $Using:Servers }
    

Uso de parámetros comunes de flujo de trabajo

Los parámetros comunes del flujo de trabajo son un conjunto de parámetros que PowerShell agrega automáticamente a todos los flujos de trabajo. PowerShell agrega los parámetros comunes del cmdlet a todos los flujos de trabajo, incluso si el flujo de trabajo no usa el atributo CmdletBinding .

Por ejemplo, el flujo de trabajo siguiente no define ningún parámetro. Sin embargo, al ejecutar el flujo de trabajo, tiene CommonParameters y WorkflowCommonParameters.

workflow Test-Workflow {Get-Process}
Get-Command Test-Workflow -Syntax
Test-Workflow [<WorkflowCommonParameters>] [<CommonParameters>]

Los parámetros comunes del flujo de trabajo incluyen varios parámetros que son esenciales para ejecutar flujos de trabajo. Por ejemplo, el parámetro común PSComputerName especifica los nodos administrados a los que afecta el flujo de trabajo.

Invoke-Command -Session $ws {
  Test-Workflow -PSComputerName Server01, Server02
}

El parámetro común de flujo de trabajo PSPersist determina cuándo se conservan los datos del flujo de trabajo. Permite agregar un punto de persistencia entre las actividades a los flujos de trabajo que no definen puntos de persistencia.

Invoke-Command -Session $ws {
  Test-Workflow -PSComputerName Server01, Server02 -PSPersist:$True
}

Otros parámetros comunes de flujo de trabajo permiten especificar las características de la conexión remota a los nodos administrados. Sus nombres y funcionalidades son similares a los parámetros de los cmdlets de comunicación remota, incluido Invoke-Command.

Invoke-Command -Session $ws {
  Test-Workflow -PSComputerName Server01, Server02 -PSPort 443
}

Tenga cuidado de distinguir los parámetros de comunicación remota que definen la conexión para la sesión de flujo de trabajo de los PS-prefixed parámetros comunes del flujo de trabajo que definen la conexión a los nodos administrados.

$ws = New-PSSession -ComputerName Server01 -ConfigurationName Microsoft.PowerShell.Workflow

Invoke-Command -Session $ws {
  Test-Workflow -PSComputerName Server01, Server02 -PSConfigurationName Microsoft.PowerShell.Workflow
}

Algunos parámetros comunes de flujo de trabajo son únicos para los flujos de trabajo, como el parámetro PSParameterCollection que permite especificar valores de parámetro comunes de flujo de trabajo diferentes para distintos nodos remotos. Para obtener una lista y una descripción de los parámetros comunes del flujo de trabajo, consulte about_WorkflowCommonParameters.

Consulte también