> 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/de/automatisierung/workflows.md).

# Workflows

Mit PowerShell Universal-Workflows können Sie Skripte und KI-Prompts zu einem einzigen Automatisierungsablauf verketten. Workflows sind nützlich, wenn Sie die Ausgabe eines Schritts an den nächsten übergeben, basierend auf vorherigen Ergebnissen verzweigen oder KI-gestützte Verarbeitung zwischen Automatisierungsschritten einfügen möchten.

Workflows können in der Admin-Konsole erstellt und über PowerShell verwaltet werden. Wenn ein Workflow ausgeführt wird, erstellt er einen Workflow-Job, den Sie über denselben Job-Verlauf überwachen können, der auch für Skripte verwendet wird.

## Einen Workflow erstellen

Um einen Workflow in der Admin-Konsole zu erstellen, gehen Sie zu Automatisierung / Workflows und klicken Sie auf Workflow erstellen.

Workflows benötigen einen Namen und können optional Parameter definieren. Diese Parameter werden angezeigt, wenn der Workflow manuell gestartet wird, und stehen während der Ausführung Ausdrücken und Aktivitäten zur Verfügung.

## Verwendung des Workflow-Designers

Der Workflow-Designer bietet einen visuellen Editor zum Anordnen und Konfigurieren Ihres Workflows. Wenn Sie einen Workflow öffnen, zeigt PSU den Designer für diese Workflow-Definition an.

### Aktivitäten hinzufügen

PowerShell Universal unterstützt Skript- und KI-Prompt-Aktivitäten in Workflows. Im Hintergrund verwenden Workflows außerdem Container-Aktivitäten wie Flussdiagramm- und Sequenzknoten, um das Gesamtlayout zu definieren.

Um eine Aktivität hinzuzufügen, ziehen Sie sie aus dem Aktivitätsbereich auf der linken Seite des Designers in eine Ablagezone auf der Arbeitsfläche.

### Aktivitätseigenschaften festlegen

Wählen Sie eine Aktivität aus, um ihre Eigenschaften im Bereich auf der rechten Seite zu bearbeiten. Die verfügbaren Eigenschaften hängen vom Aktivitätstyp ab.

Bei Skript-Aktivitäten stellt PSU die PowerShell-Parameter des Skripts als Aktivitätseigenschaften bereit. Dadurch ist es möglich, feste Werte oder Laufzeitausdrücke zu binden, ohne das Skript nur für die Workflow-Verwendung umschreiben zu müssen.

### PowerShell-Ausdrücke verwenden

Einige Aktivitätseigenschaften unterstützen PowerShell-Ausdrücke. Ausdrücke werden zur Laufzeit ausgewertet und können auf Workflow-Eingabewerte und die Ausgabe der vorherigen Aktivität verweisen.

Verwenden Sie Ausdrücke, wenn ein Eigenschaftswert zur Laufzeit berechnet und nicht als fester Literalwert gespeichert werden soll. Beispielsweise können Sie ein Verhalten basierend auf einem Workflow-Parameter aktivieren oder deaktivieren oder Werte aus der Ausgabe des vorherigen Schritts auswählen.

## Workflow-Daten

Ausdrücke und Aktivitäten können über integrierte Variablen auf den Workflow-Status zugreifen.

### Workflow-Objekt

Verwenden Sie die Variable `$Workflow` in PowerShell-Ausdrücken, um auf Werte von Workflow-Parametern zuzugreifen.

Beispielsweise können Sie eine boolesche Eigenschaft basierend auf der ausgewählten Umgebung festlegen.

{% code overflow="wrap" %}

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

{% endcode %}

Sie können auch einen Zeichenfolgen-Workflow-Parameter direkt an eine Aktivitätseigenschaft übergeben.

{% code overflow="wrap" %}

```powershell
$Workflow.Environment
```

{% endcode %}

Workflow-Parameter werden am Workflow selbst definiert. Verwenden Sie sie für Werte, die beim Start des Workflows bereitgestellt werden sollen, z. B. einen Umgebungsnamen, einen Aufbewahrungszeitraum oder ein Genehmigungsziel.

### PSUItem

Die Variable `$PSUItem` bietet Zugriff auf die Ausgabe der vorherigen Aktivität. Der Objekttyp hängt davon ab, was diese Aktivität zurückgegeben hat.

Beispielsweise kann ein Skript `$PSUItem` als Eingabe akzeptieren.

{% code overflow="wrap" %}

```powershell
param($PSUItem)

$PSUItem.MyValue
```

{% endcode %}

Sie können `PSUItem` auch in KI-Prompts referenzieren.

{% code overflow="wrap" %}

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

{% endcode %}

Sie können `$PSUItem` oder `$Output` auch in PowerShell-Ausdrücken verwenden, um das Verhalten einer Aktivität basierend auf der Ausgabe der vorherigen Aktivität zu ändern.

{% code overflow="wrap" %}

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

{% endcode %}

Verwenden Sie `$PSUItem`, wenn Sie strukturierte Ausgaben von einer Aktivität an die nächste übergeben möchten. Dies ist der wichtigste Weg, mehrstufige Workflows zu erstellen, ohne Zwischenzustände an anderer Stelle zu speichern.

### Deconstruct Hashtable Output

**Überblick**\
\
`Deconstruct Hashtable Output` steuert, was mit dem Rückgabewert eines Script-Schritts geschieht, sobald der Schritt abgeschlossen ist. Wenn aktiviert, nimmt PowerShell Universal eine vom Skript zurückgegebene `Hashtable` mit einem einzelnen Objekt und verteilt ihre Schlüssel/Werte in den Workflow-bezogenen Ausgabestatus, sodass nachgelagerte Schritte jeden Schlüssel als vollwertige Workflow-Ausgabe referenzieren können, anstatt in `$PSUItem` zu graben.\
\
Wenn deaktiviert, findet diese Verteilung nicht statt. Der nächste Schritt sieht die Rohausgabe des vorherigen Schritts weiterhin über `$PSUItem`, aber jeder Schlüssel muss manuell entpackt werden.\
\
**Verhalten**\
\
Wenn die Script-Aktivität abgeschlossen ist, führt PowerShell Universal Folgendes aus:\
\
1\. Liest die Pipeline-Ausgabe des Schritts.\
2\. Wenn `DeconstructHashtableOutput` `true` ist:\
• Fährt nur fort, wenn der Schritt genau ein Ausgabeobjekt mit nicht leeren Daten zurückgegeben hat.\
• Wenn das Basisobjekt eine `Hashtable` ist, wird jeder Schlüssel durchlaufen und jedes `key → value`-Paar in den Workflow-Ausgabestatus kopiert (zugänglich von nachgelagerten Schritten).\
3\. In jedem Fall wird die Rohausgabe für `$PSUItem` im nächsten Schritt gespeichert (Status der vorherigen Aktivität).\
\
Beispiel\
\
Skript für Schritt 1:

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

Mit `DeconstructHashtableOutput = $true` (Standard) kann Schritt 2 jeden Schlüssel direkt über den Workflow-Ausgabestatus referenzieren:

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

Durch das Festlegen des Ausgabestatus der Workflow-Aktivität kann die nachfolgende Aktivität die Ausgabe als Eingabe für passende Parameter erhalten.

Mit `DeconstructHashtableOutput = $false` sieht Schritt 2 die Hashtable weiterhin über `$PSUItem` und muss sie explizit entpacken:

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

**Fallstricke**\
\
• Genau ein Pipeline-Objekt. Die Dekonstruktion wird nur ausgelöst, wenn das Skript eine einzelne Ausgabe ausgibt. Jedes versehentliche `Write-Output`, jeder nicht unterdrückte Ausdruck oder jede unbeabsichtigte Ausgabe mehrerer Werte deaktiviert sie stillschweigend — selbst wenn die Einstellung aktiviert ist. Wenn Sie leere Workflow-Ausgaben sehen, wandeln Sie unerwünschte Ausgaben in `$null` um oder leiten Sie sie an `Out-Null` weiter, um die Pipeline auf eine einzelne Hashtable zu beschränken.\
• Nur `Hashtable` — nicht `PSCustomObject`. Der Code prüft das Basisobjekt auf `Hashtable`. `[pscustomobject]@{ ... }` wird nicht dekonstruiert. Verwenden Sie `@{ ... }`, wenn Sie das Verteilungsverhalten wünschen.\
• Leere Ausgaben oder Ausgaben mit Leerzeichen werden ignoriert. Wenn die einzelne Ausgabe des Skripts keine Daten enthält, wird die Dekonstruktion übersprungen.\
• `$PSUItem` funktioniert in beiden Fällen weiterhin. Das Deaktivieren der Einstellung unterbricht nicht den Zugriff auf die Ausgabe des vorherigen Schritts — es ändert nur, ob Schlüssel als benannte Workflow-Ausgaben verfügbar gemacht werden.\
\
**Wann sollte sie deaktiviert werden**\
\
Der Standardwert (`$true`) ist für die meisten Workflows die richtige Wahl. Deaktivieren Sie sie, wenn:\
\
• Ihr Skript legitim mehrere Pipeline-Objekte ausgeben muss und PSU nicht versuchen soll, Verteilungssemantik anzuwenden.\
• Sie möchten, dass nachgelagerte Schritte die Hashtable als einzelnes opakes Objekt über `$PSUItem` erhalten und das Entpacken selbst übernehmen.\
• Sie eine `Hashtable` zurückgeben, deren Schlüssel mit Namen kollidieren, die bereits im Workflow-Ausgabestatus vorhanden sind, und Sie ein Überschreiben vermeiden möchten.\
\
**Festlegen des Werts über `New-PSUWorkflowActivity`**

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

## Beispiel für ein Workflow-Muster

Ein gängiges Muster ist:

1. Führen Sie ein Skript aus, um Daten zu sammeln.
2. Übergeben Sie die Ausgabe an einen KI-Prompt oder ein anderes Skript.
3. Verwenden Sie das Ergebnis in einem abschließenden Skript, um eine Aktion auszuführen.

Zum Beispiel:

* Eine Skript-Aktivität gibt eine Liste von Prozessen zurück.
* Ein KI-Prompt identifiziert den Prozess, der den meisten Speicher verwendet.
* Ein abschließendes Skript erhält dieses Ergebnis über `$PSUItem` und sendet eine Benachrichtigung.

Dieser Ansatz hält jeden Schritt fokussiert und erleichtert das Testen und die Fehlerbehebung des Workflows.

## Workflows ausführen

### Bei Bedarf

Workflows können bei Bedarf ausgeführt werden, indem Sie in der Admin-Konsole auf das Wiedergabesymbol klicken. Wenn der Workflow Parameter definiert, fordert PSU diese im Ausführungsdialog an. Nach dem Start des Workflows leitet PSU Sie zur Workflow-Job-Seite weiter.

### Zeitplanung

Workflows unterstützen dieselben Zeitplanungsoptionen wie Skripte, einschließlich CRON-, einmaliger und kontinuierlicher Zeitpläne. Sie können Workflow-Zeitpläne über Automatisierung / Zeitpläne erstellen oder einen Zeitplan direkt dem Workflow zuweisen.

Verwenden Sie Zeitpläne, wenn der Workflow ohne manuelle Eingabe ausgeführt werden soll, z. B. für nächtliche Aufräumarbeiten, Umgebungsvalidierung oder periodische KI-gestützte Klassifizierung.

### Invoke-PSUWorkflow

`Invoke-PSUWorkflow` ermöglicht es Ihnen, Workflows über PowerShell oder von anderen Teilen der PowerShell Universal-Plattform aus auszuführen. Wie bei `Invoke-PSUScript` können Sie beim Aufrufen des Workflows Parameterwerte angeben.

## Workflows mit PowerShell verwalten

Sie können Workflows zusätzlich zur Admin-Konsole über das Universal-Modul verwalten.

Die zentralen Workflow-Cmdlets sind:

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

### Workflow-Parameter definieren

Verwenden Sie `New-PSUWorkflowParameter`, um Metadaten für Workflow-Eingaben zu definieren, z. B. einen Standardwert, ob der Parameter erforderlich ist und den den Benutzern angezeigten Hilfetext.

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

### Aktivitäten in PowerShell definieren

Verwenden Sie `New-PSUWorkflowActivity`, um Definitionen von Workflow-Aktivitäten zu erstellen.

* Verwenden Sie `-Parameters` für literale Werte.
* Verwenden Sie `-Expressions` für zur Laufzeit ausgewertete PowerShell-Ausdrücke.
* Bei `-Type Script` kann PSU dynamische Parameter aus dem Zielskript bereitstellen.

```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)
}
```

### Einen Workflow in PowerShell erstellen

`New-PSUWorkflow` akzeptiert entweder eine Rohdefinitionszeichenfolge oder einen Skriptblock, der eine einzelne Workflow-Aktivitätsdefinition zurückgibt.

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

## Workflow-Ausführungen überwachen

Workflow-Ausführungen erscheinen im Job-Verlauf, genau wie Skript-Jobs. Verwenden Sie die Job-Seite, um Folgendes zu prüfen:

* aktueller Status
* Stream-Ausgabe
* Pipeline-Ausgabe
* Fehler

Dies ist der beste Ort, um fehlgeschlagene Workflow-Schritte zu beheben und die zwischen Aktivitäten übergebenen Daten zu überprüfen.

## Fehlerbehebung

* Wenn eine Eigenschaft zur Laufzeit berechnet werden soll, verwenden Sie einen Ausdruck anstelle eines festen Werts.
* `$PSUItem` enthält nur die Ausgabe der vorherigen Aktivität. Die erste Aktivität in einem Workflow hat keine vorherige Ausgabe.
* Eigenschaften von Skript-Aktivitäten basieren auf den Metadaten des Zielskripts. Wenn ein Skriptparameter nicht wie erwartet angezeigt wird, überprüfen Sie den Skriptpfad und den Parameternamen.
* Namen von Aktivitätsparametern und Ausdrucksschlüssel müssen gültigen Eigenschaften für diesen Aktivitätstyp entsprechen.
* Wenn Sie eine wiederkehrende Ausführung benötigen, hängen Sie einen Zeitplan an, anstatt den Workflow manuell aufzurufen.

## Verwandte Themen

* [Jobs](/powershell-universal/de/automatisierung/jobs.md)
* [Zeitpläne](/powershell-universal/de/automatisierung/schedules.md)
* [Skripte](/powershell-universal/de/automatisierung/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/de/automatisierung/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.
