In Unternehmen wird es immer wichtiger, Prozesse zu automatisieren, um Zeit für die wichtigen Dinge zu gewinnen. Hierbei gilt es sich zunächst auf die „QuickWins“ zu konzentrieren, damit du ein optimales Kosten-/Nutzen-Verhältnis erreichst. Prüfe also zunächst, welche Tätigkeiten häufig auftreten und welche besonders viel Zeit in Anspruch nehmen.
Anschließend kannst du dir Gedanken zu den Prozessen machen, welche es zu automatisieren gilt. Eine stichpunktartige Ablaufbeschreibung der Prozesse kann die spätere, technische Umsetzung wesentlich vereinfachen.
Die Enterprise Service Management Lösung der Matrix42 bietet die Möglichkeit mithilfe von Workflows auf einfachem Wege solch eine Automatisierung zu erreichen. Dennoch gibt es erweiterte Möglichkeiten wie etwa die Verwendung von PowerShell-Skripten.
In manchen Situationen kann es notwendig sein, Array-Objekte als Ein- bzw. Ausgabeparameter zu übergeben. Genau das beschreibt diese kurze Anleitung.
Zusätzlich möchte ich dir grundlegende Informationen zur PowerShell-Activity mitgeben und wie du Felder in der Legacy als Pflichtfeld markieren kannst
1. Die Activty „Invoke PowerShell“
Die PowerShell-Activity findest du im Workflow Studio ganz einfach über die Suche auf linken Seiten. Diese kannst du per Drag-and-drop in den Flow ziehen, um sie in den Prozess einzubinden.

Um die Einstellungen der Activity zu bearbeiten, musst du diese einfach anklicken. Auf der rechten Seite sind die folgenden Eigenschaften konfigurierbar:
- Parameters
Ein- und ausgehende Parameter, welche aus der param-Section deines PowerShell-Scripts übernommen werden - Persist
Steuert, ob die PowerShell-Sitzung nach Beendigung des Skripts offen gehalten werden soll, damit ein spätere Activity diese weiter nutzen kann - Run on Application Server
Sofern aktiviert, wird der Workflow nur auf dem Matrix42 Worker des Anwendungsservers – siehe Matrix42 Worker – ausgeführt. Das kann hilfreich sein, um Modulabhängigkeiten sowie Firewall-Konfigurationen zu vereinfachen - Script
Beinhaltet das eigentliche Skript, welches im Prozess ausgeführt werden soll. Dabei kann auf die ein und ausgehenden Parameter zugegriffen werden - Variables
Diese sind mit den Parametern zu vergleichen. Vorteil der Parameter ist die Möglichkeit der Vorbelegung, sofern die param-Section im Skript bereits vorhanden ist.
Zusätzlich gibt es zwei Eigenschaften, welche für den Output des Skript’s relevant sind:
- Result
Übergibt das zuletzt ausgegebene Objekt an die gewählte Variable - TypeArgument
Definiert den Typ der unter „Result“ angegebenen Variable an
Nun hast du erst einmal grundlegende Informationen zur Activity.
2. Der Workflow
Der hier gezeigte Workflow soll lediglich die Verwendung von PowerShell-Arrays zeigen und erfüllt keinen tieferen Zweck. Legen wir direkt einmal los.
Als Erstes hinterlegen wir das Beispiel-Skript:
#PowerShell-Array initialisieren
$test = @()
# Erstellung des ersten Custom-Objektes
$obj = New-Object PSCustomObject
$obj | Add-Member -type NoteProperty -Name Name -Value "Musterfrau"
$obj | Add-Member -type NoteProperty -Name Firstname -Value "Maxi"
# Objekt zum Array hinzufügen
$test += $obj
# Erstellung des ersten Custom-Objektes
$obj2 = New-Object PSCustomObject
$obj2 | Add-Member -type NoteProperty -Name Name -Value "Mustermann"
$obj2 | Add-Member -type NoteProperty -Name Firstname -Value "Max"
# Objekt zum Array hinzufügen
$test += $obj2
# Ausgabe des Array's zur Übergabe an die Variable an "Result"
$test

Damit die Information aus der Eigenschaft „Result“ in die Variable „InvokePowerShell_Result“ geschrieben wird, muss diese Variable zunächst erstellt und anschließend verknüpft werden:

Die zuvor angelegte, verknüpfte Variable „InvokePowerShell_Result“ kannst du nun z.B. in einem ForEach verwenden, um jedes Element einzeln im Workflow zu verarbeiten:

Dem ForEach-Element kannst du noch einen sprechenden Variablennamen für das Item zuweisen (hier „record“):

Anschließend kannst du wie folgt auf die einzelnen Element-Eigenschaften innerhalb des ForEach zugreifen (hier die Eigenschaft „Name“ bzw. „Firstname“):

Verwendungszwecke gibt es sicher viele. Mit diesem Artikel hast du nun das notwendige Handwerkszeug erlangt und kannst dich nun im Workflow-Universum der Matrix42 austoben.
[wpdiscuz-feedback id=“nx50c2ainw“ question=“Du kannst uns auch gerne deinen UseCase wissen lassen ;)“ opened=“0″]Viel Spaß dabei[/wpdiscuz-feedback]Und falls du dich noch mehr austoben willst, lerne hier, wie du mit Filtern in der UUX nach doppelten Datensätzen suchen kannst 😉
Vielen Dank für den ausführlichen Artikel über die Nutzung von Powershell im Workflow Studio.
Ist es eigentlich generell möglich eine Datei innerhalb einer Powershell Aktion im Workflow Studio zu lesen? Bei meinen Versuchen bin ich bisher gescheitert.
Hallo Herr Frey,
das ist über Get-Content bzw. Import-CSV oder ähnlichen CMDLets im Powershell möglich.
Hallo,
wenn es möglich sein soll, müssen die Dateien dann an einem bestimmten Ort im Dateisystem stehen, damit ich einen Zugriff darauf erhalte?
Gebe ich beim Zugriff auf die Datei einen Dateipfad an? Ist dieser ein absoluter oder relativer Dateipfad, also „C:\…“ oder „.\…“?
Hallo,
tatsächlich verhält es sich genauso als wenn man eine Powershell-Konsole auf dem Server startet, auf dem der Matrix42 Worker Dienst läuft. Es sind absolute und relative Pfade möglich. Man könnte das Ganze auch mittels folgendem Befehls prüfen:
dir | out-file C:\temp\test.txt
Damit wird dann das aktuelle Verzeichnis in die Datei test.txt geschrieben und von dort kann man dann mit dem relativen Pfad arbeiten.
Ist die Checkbox „Run on application server“ an der Activity aktiv, wird folgender Pfad ausgegeben:
C:\Program Files (x86)\Matrix42\Matrix42 Workplace Management\svc
Ist sie nicht aktiv, wird dieser Pfad ausgegeben:
C:\Windows\system32