> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/es/automatizacion/workflows.md).

# Flujos de trabajo

Los flujos de trabajo de PowerShell Universal le permiten encadenar scripts y prompts de IA en un único flujo de automatización. Los flujos de trabajo son útiles cuando necesita pasar la salida de un paso al siguiente, bifurcar en función de los resultados anteriores o añadir procesamiento asistido por IA entre pasos de automatización.

Los flujos de trabajo se pueden crear en la consola de administración y gestionar desde PowerShell. Cuando se ejecuta un flujo de trabajo, se crea un trabajo de flujo de trabajo que puede supervisar desde el mismo historial de trabajos que se utiliza para los scripts.

## Crear un flujo de trabajo

Para crear un flujo de trabajo en la consola de administración, vaya a Automatización / Flujos de trabajo y haga clic en Crear flujo de trabajo.

Los flujos de trabajo requieren un nombre y, opcionalmente, pueden definir parámetros. Estos parámetros se muestran cuando el flujo de trabajo se inicia manualmente y están disponibles para las expresiones y las actividades durante la ejecución.

## Usar el diseñador de flujos de trabajo

El diseñador de flujos de trabajo proporciona un editor visual para organizar y configurar su flujo de trabajo. Cuando abre un flujo de trabajo, PSU muestra el diseñador de esa definición de flujo de trabajo.

### Añadir actividades

PowerShell Universal admite actividades de script y de prompt de IA en los flujos de trabajo. Internamente, los flujos de trabajo también utilizan actividades contenedoras, como los nodos de diagrama de flujo y de secuencia, para definir la disposición general.

Para añadir una actividad, arrástrela desde el panel de actividades situado en el lado izquierdo del diseñador hasta una zona de destino del lienzo.

### Configurar las propiedades de una actividad

Seleccione una actividad para editar sus propiedades en el panel de la derecha. Las propiedades disponibles dependen del tipo de actividad.

En las actividades de script, PSU expone los parámetros de PowerShell del script como propiedades de la actividad. Esto permite enlazar valores fijos o expresiones en tiempo de ejecución sin tener que reescribir el script solo para su uso en el flujo de trabajo.

### Usar expresiones de PowerShell

Algunas propiedades de actividad admiten expresiones de PowerShell. Las expresiones se evalúan en tiempo de ejecución y pueden hacer referencia a los valores de entrada del flujo de trabajo y a la salida de la actividad anterior.

Use expresiones cuando el valor de una propiedad deba calcularse en tiempo de ejecución en lugar de almacenarse como un literal fijo. Por ejemplo, puede habilitar o deshabilitar un comportamiento en función de un parámetro del flujo de trabajo o seleccionar valores de la salida del paso anterior.

## Datos del flujo de trabajo

Las expresiones y las actividades pueden acceder al estado del flujo de trabajo mediante variables integradas.

### Objeto Workflow

Use la variable `$Workflow` en las expresiones de PowerShell para acceder a los valores de los parámetros del flujo de trabajo.

Por ejemplo, puede establecer una propiedad booleana en función del entorno seleccionado.

{% code overflow="wrap" %}

```powershell
$Workflow.Environment -eq "Production"
```

{% endcode %}

También puede pasar un parámetro de flujo de trabajo de tipo cadena directamente a una propiedad de actividad.

{% code overflow="wrap" %}

```powershell
$Workflow.Environment
```

{% endcode %}

Los parámetros del flujo de trabajo se definen en el propio flujo de trabajo. Úselos para valores que deban proporcionarse cuando se inicia el flujo de trabajo, como el nombre de un entorno, un período de retención o un destino de aprobación.

### PSUItem

La variable `$PSUItem` proporciona acceso a la salida de la actividad anterior. El tipo de objeto depende de lo que haya devuelto esa actividad.

Por ejemplo, un script puede aceptar `$PSUItem` como entrada.

{% code overflow="wrap" %}

```powershell
param($PSUItem)

$PSUItem.MyValue
```

{% endcode %}

También puede hacer referencia a `PSUItem` en los prompts de IA.

{% code overflow="wrap" %}

```
PSUItem contains a list of processes. Return the process using the most memory as JSON.
```

{% endcode %}

También puede usar `$PSUItem` o `$Output` en expresiones de PowerShell para cambiar el comportamiento de una actividad en función de la salida de la actividad anterior.

{% code overflow="wrap" %}

```powershell
$PSUItem.ProcessMemory -gt 100
```

{% endcode %}

Use `$PSUItem` cuando desee pasar una salida estructurada de una actividad a la siguiente. Esta es la forma principal de crear flujos de trabajo de varios pasos sin almacenar el estado intermedio en otro lugar.

### Deconstruct Hashtable Output

**Descripción general**\
\
`Deconstruct Hashtable Output` controla lo que ocurre con el valor de retorno de un paso de Script una vez que el paso finaliza. Cuando está habilitado, PowerShell Universal toma un `Hashtable` de objeto único devuelto por el script y distribuye sus claves/valores en el estado de salida con ámbito de flujo de trabajo, de modo que los pasos posteriores pueden hacer referencia a cada clave como una salida de flujo de trabajo de primera clase en lugar de tener que indagar en `$PSUItem`.\
\
Cuando está deshabilitado, esa distribución no se produce. El siguiente paso sigue viendo la salida sin procesar del paso anterior a través de `$PSUItem`, pero cada clave se debe desempaquetar manualmente.\
\
**Comportamiento**\
\
Cuando la actividad de Script finaliza, PowerShell Universal:\
\
1\. Lee la salida de canalización del paso.\
2\. Si `DeconstructHashtableOutput` es `true`:\
• Continúa solo si el paso devolvió exactamente un objeto de salida con datos no vacíos.\
• Si el objeto base es un `Hashtable`, recorre cada clave y copia cada par `key → value` en el estado de salida del flujo de trabajo (accesible desde los pasos posteriores).\
3\. En todos los casos, almacena la salida sin procesar para `$PSUItem` en el siguiente paso (estado de la actividad anterior).\
\
Ejemplo\
\
Script del paso 1:

```powershell
@{
    Server = 'web01'
    Port   = 443
    Region = 'us-east'
}
```

Con `DeconstructHashtableOutput = $true` (predeterminado), el paso 2 puede hacer referencia a cada clave directamente a través del estado de salida del flujo de trabajo:

```powershell
$Workflow.Output.Server   # 'web01'
$Workflow.Output.Port     # 443
$Workflow.Output.Region   # 'us-east'
```

Al establecer el estado de salida de la actividad del flujo de trabajo, la actividad siguiente puede recibir la salida como entrada para los parámetros coincidentes.

Con `DeconstructHashtableOutput = $false`, el paso 2 sigue viendo el hashtable a través de `$PSUItem` y debe desempaquetarlo explícitamente:

```powershell
$PSUItem.Server
$PSUItem.Port
$PSUItem.Region
```

**Advertencias**\
\
• Exactamente un objeto de canalización. La deconstrucción solo se activa cuando el script emite una única salida. Cualquier `Write-Output` suelto, expresión no suprimida o emisión accidental de varios valores la deshabilita silenciosamente, incluso con la opción activada. Si observa salidas de flujo de trabajo vacías, convierta la salida no deseada a `$null` o canalícela a `Out-Null` para mantener la canalización en un único hashtable.\
• Solo `Hashtable`, no `PSCustomObject`. El código comprueba `Hashtable` en el objeto base. `[pscustomobject]@{ ... }` no se deconstruirá. Use `@{ ... }` si desea el comportamiento de distribución.\
• La salida vacía o con espacios en blanco se ignora. Si la única salida del script no contiene datos, se omite la deconstrucción.\
• `$PSUItem` sigue funcionando en cualquier caso. Desactivar la opción no impide el acceso a la salida del paso anterior; solo cambia si las claves se exponen como salidas de flujo de trabajo con nombre.\
\
**Cuándo desactivarla**\
\
El valor predeterminado (`$true`) es la opción correcta para la mayoría de los flujos de trabajo. Desactívela cuando:\
\
• Su script necesite legítimamente emitir varios objetos de canalización y no desee que PSU intente aplicar la semántica de distribución.\
• Desee que los pasos posteriores reciban el hashtable como un único objeto opaco a través de `$PSUItem` y se encarguen ellos mismos de desempaquetarlo.\
• Esté devolviendo un `Hashtable` cuyas claves entren en conflicto con nombres ya presentes en el estado de salida del flujo de trabajo y desee evitar sobrescribirlos.\
\
**Establecer el valor mediante `New-PSUWorkflowActivity`**

```powershell
New-PSUWorkflowActivity `
    -Type Script `
    -ScriptFullPath 'C:\ProgramData\UniversalAutomation\Repository\scripts\Deploy.ps1' `
    -Name 'Deploy' `
    -FailOnScriptError $true `
    -DeconstructHashtableOutput $true
```

## Ejemplo de patrón de flujo de trabajo

Un patrón habitual es:

1. Ejecutar un script para recopilar datos.
2. Pasar la salida a un prompt de IA o a otro script.
3. Usar el resultado en un script final para llevar a cabo una acción.

Por ejemplo:

* Una actividad de script devuelve una lista de procesos.
* Un prompt de IA identifica el proceso que utiliza más memoria.
* Un script final recibe ese resultado a través de `$PSUItem` y envía una notificación.

Este enfoque mantiene cada paso centrado y hace que el flujo de trabajo sea más fácil de probar y de solucionar problemas.

## Ejecutar flujos de trabajo

### A demanda

Los flujos de trabajo se pueden ejecutar a demanda haciendo clic en el icono de reproducción de la consola de administración. Si el flujo de trabajo define parámetros, PSU los solicita en el cuadro de diálogo de ejecución. Una vez iniciado el flujo de trabajo, PSU le redirige a la página del trabajo del flujo de trabajo.

### Programación

Los flujos de trabajo admiten las mismas opciones de programación que los scripts, incluidas las programaciones CRON, únicas y continuas. Puede crear programaciones de flujos de trabajo desde Automatización / Programaciones o asignando una programación directamente al flujo de trabajo.

Use programaciones cuando el flujo de trabajo deba ejecutarse sin intervención manual, como la limpieza nocturna, la validación de entornos o la clasificación periódica asistida por IA.

### Invoke-PSUWorkflow

`Invoke-PSUWorkflow` le permite ejecutar flujos de trabajo desde PowerShell o desde otras partes de la plataforma PowerShell Universal. Igual que con `Invoke-PSUScript`, puede proporcionar valores de parámetros al invocar el flujo de trabajo.

## Gestionar flujos de trabajo con PowerShell

Puede gestionar los flujos de trabajo a través del módulo Universal, además de la consola de administración.

Los cmdlets principales de flujos de trabajo son:

* `Get-PSUWorkflow`
* `New-PSUWorkflow`
* `Set-PSUWorkflow`
* `Remove-PSUWorkflow`
* `New-PSUWorkflowParameter`
* `New-PSUWorkflowActivity`
* `Invoke-PSUWorkflow`

### Definir parámetros de flujo de trabajo

Use `New-PSUWorkflowParameter` para definir los metadatos de entrada del flujo de trabajo, como un valor predeterminado, si el parámetro es obligatorio y el texto de ayuda que se muestra a los usuarios.

```powershell
$Parameters = @(
	New-PSUWorkflowParameter -Name Environment -DefaultValue Development -Required -HelpText 'Target environment'
)
```

### Definir actividades en PowerShell

Use `New-PSUWorkflowActivity` para crear definiciones de actividades de flujo de trabajo.

* Use `-Parameters` para valores literales.
* Use `-Expressions` para expresiones de PowerShell evaluadas en tiempo de ejecución.
* Para `-Type Script`, PSU puede exponer parámetros dinámicos del script de destino.

```powershell
$Deploy = New-PSUWorkflowActivity -Type Script `
	-Name Deploy `
	-ScriptFullPath 'C:\ProgramData\UniversalAutomation\Repository\scripts\Deploy.ps1' `
	-FailOnScriptError $true

$Root = New-PSUWorkflowActivity -Type Sequence -Name Deployment -Parameters @{
	Activities = @($Deploy)
}
```

### Crear un flujo de trabajo en PowerShell

`New-PSUWorkflow` acepta una cadena de definición sin procesar o un bloque de script que devuelva una única definición de actividad de flujo de trabajo.

```powershell
$Parameters = @(
	New-PSUWorkflowParameter -Name Environment -DefaultValue Development -Required -HelpText 'Target environment'
)

$Deploy = New-PSUWorkflowActivity -Type Script `
	-Name Deploy `
	-ScriptFullPath 'C:\ProgramData\UniversalAutomation\Repository\scripts\Deploy.ps1' `
	-Expressions @{ Environment = '$Workflow.Environment' }

$Root = New-PSUWorkflowActivity -Type Sequence -Name Deployment -Parameters @{
	Activities = @($Deploy)
}

New-PSUWorkflow -Name ApplicationDeployment -Description 'Deploy an application through a workflow' -WorkflowParameters $Parameters -Definition { $Root }
```

## Supervisar las ejecuciones de flujos de trabajo

Las ejecuciones de flujos de trabajo aparecen en el historial de trabajos, igual que los trabajos de script. Use la página del trabajo para inspeccionar:

* estado actual
* salida de flujo
* salida de canalización
* errores

Este es el mejor lugar para solucionar los problemas de los pasos de flujo de trabajo fallidos y verificar los datos que se pasan entre actividades.

## Solución de problemas

* Si una propiedad debe calcularse en tiempo de ejecución, use una expresión en lugar de un valor fijo.
* `$PSUItem` solo contiene la salida de la actividad anterior. La primera actividad de un flujo de trabajo no tendrá salida previa.
* Las propiedades de la actividad de script se basan en los metadatos del script de destino. Si un parámetro del script no aparece como se esperaba, verifique la ruta del script y el nombre del parámetro.
* Los nombres de los parámetros de la actividad y las claves de las expresiones deben coincidir con propiedades válidas para ese tipo de actividad.
* Si necesita una ejecución recurrente, adjunte una programación en lugar de invocar el flujo de trabajo manualmente.

## Temas relacionados

* [Trabajos](/powershell-universal/es/automatizacion/jobs.md)
* [Programaciones](/powershell-universal/es/automatizacion/schedules.md)
* [Scripts](/powershell-universal/es/automatizacion/scripts.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/es/automatizacion/workflows.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
