Windows PowerShell: Workflowaktivitäten im Detail

Jeden Monat in diesem Jahr präsentieren Don Jones eine Ratenzahlung in einem 12-Teil-Tutorial auf Windows PowerShell -Workflow. Wir empfehlen Ihnen, durch die Serie in Ordnung, zu lesen, beginnend mit der Januar 2013 Spalte.

Don Jones

Wenn Sie einen Workflow in Windows PowerShellzu schreiben, müssen Sie daran erinnern, dass jeder Befehl muss in einer Windows Workflow Foundation (WF)-Aktivität oder eine InlineScript Aktivität übersetzt werden.

Was ist zunächst einmal eine Aktivität? Windows PowerShell -Workflows sind letztlich etwas übersetzt, die WF versteht. Was versteht WF ist Aktivitäten. In WF ist eine Aktivität eine einzelne Aktion, die innerhalb eines Workflows stattfindet.

Viele der die Kern- Windows PowerShell -Befehle haben entsprechende Aktivitäten. Diese Aktivitäten sind völlig unabhängig von den Befehlen. Mit anderen Worten, musste das Team bei Microsoft hinsetzen und schreiben beide den Windows PowerShell -Befehl — wie Where-Object — und eine entsprechende WF-Aktivität, die das gleiche getan haben.

So sind sie wirklich zwei parallele Strukturen. Wenn Sie einen Befehl in einem Workflow verwenden, sucht Windows PowerShell um festzustellen, ob eine entsprechende Aktivität geschrieben und auf dem Computer installiert wurde. Wenn vorhanden ist, dann ist das, was den Workflow verwendet wird.

Dies ist ein wichtiger Gesichtspunkt. Es ist durchaus möglich, dass andere Microsoft-Teams und sogar dritte Aktivitäten wird in Zukunft erstellen. Bevor Sie diese verwenden können, obwohl sie installiert und auf welchem Computer die Workflows ausgeführt wird, den, die Sie schreiben, registriert werden müssen. Wie Sie gehen über das tun, das ist von Produkt zu Produkt unterschiedlich.

Fehlen der Aktivität

Wenn Sie einen Befehl, das nicht über eine WF-Aktivität entspricht verwenden, wird Windows PowerShell den Befehl in einem impliziten InlineScript Block umbrochen. InlineScript ist eine Aktivität, die nativ von WF erkannt. Grundsätzlich, führen Sie es erzählt WF, eine Kopie des Windows PowerShellzu starten den Befehl, und schließen Sie dann die Kopie des Windows PowerShell.

Da die Verpackung InlineScript implizit geschehen kann — d. h., Sie sehen es passiert nicht — Sie möglicherweise überhaupt nicht, dass es passiert ist. In Windows PowerShell 3.0 in der Tat ist es schwierig, herauszufinden, welche Befehle WF Entsprechungen haben und welche nicht. Sie möglicherweise nicht immer in der Lage zu sagen, was als native Aktivität ausgeführt wird und was in einem InlineScript Wrapper erstellt wird. Zum größten Teil musst nicht du wissen. Jedoch schafft gewisse Wirkung.

Wenn Sie versuchen, diese wollten, würde es beispielsweise ausfallen:

Workflow My-Workflow { Import-Module DHCPServer Get-DHCPServerv4Scope }

Der Workflow schlägt fehl, da es keine WF-Aktivität für Import-Module gibt. Jede Aktivität muss in einem eigenen Prozess (mehr oder weniger) geschehen. Denken Sie daran, Sie zu unterbrechen und später fortsetzen ein Workflows, d. h., jeder Befehl tun muss, um eine eigene Setup und Teardown. Nichts ist Verlass auf alles, was sonst in den gleichen Speicher oder Prozess angetreten. Windows PowerShell wird nicht in eine InlineScript Import-Module einbinden, denn das würde Windows PowerShellzu öffnen, führen Sie Import-Module und schließen Sie dann Windows PowerShell. Effektiv wäre das Modul entladen und machen die gesamte Übung sinnlos.

Folgendes, funktioniert jedoch:

Workflow My-Workflow { InlineScript { Import-Module DHCPServer Get-DHCPServerv4Scope } }

Dies wird einen expliziten InlineScript Block hinzugefügt. Dies bedeutet, dass die beiden Befehle in der gleichen Windows PowerShell -Sitzung ausgeführt werden.

InlineScript Blöcke

Sie können sich wahrscheinlich vorstellen, wie viele Ihrer Arbeitsabläufe in einem oder mehreren InlineScript Blöcke aufgeteilt werden könnte. Wenn Sie mehr als einen Befehl in einem Prozess ausgeführt und haben diese Befehle Ergebnisse und Ausgabe teilen müssen, ist ein InlineScript schließlich der Weg zu gehen.

Denken Sie daran, dass jeder InlineScript eigene eigenständige Windows PowerShell -Prozess ist. Beispielsweise funktioniert das nicht:

Workflow My-Workflow { InlineScript { Import-Module DHCPServer $scopes = Get-DHCPServerv4Scope } InlineScript { ForEach ($scope in $scopes) { Write $scope.IPAddress } } }

Die $scopes-Variable in der ersten InlineScript erstellt wird nicht in der zweiten vorhanden. Der Code wird fehlschlagen, oder einfach nicht nichts tun. Jetzt Sie denken vielleicht, "setzen nicht warum ich nur alles in einem einzigen InlineScript-Block?" Sie könnten:

Workflow My-Workflow { InlineScript { Import-Module DHCPServer $scopes = Get-DHCPServerv4Scope ForEach ($scope in $scopes) { Write $scope.IPAddress } } }

Das Problem, das, dem Sie jetzt bekommen, ist, dass Ihr Workflow einer einzelnen Aktivität besteht. WF unterstützt nur Interaktivität Checkpoints und Wiederaufnahme. Ihre Single-Aktivitäten-Workflow kann nicht angehalten, fortgesetzt oder unterbrochen werden.

In vielerlei Hinsicht, die Sie entfernt haben, die Vorteile ein Workflows in erster Linie zu tun. Sie erhalten weiterhin integrierten Unterstützung für die Remoteausführung. Wenn dies einen langwierigen, mehrstufigen Prozess war, aber nicht Sie überleben eine Störungsmeldung (wie ein Netzwerkausfall Unterbrechung oder Power) und wo Sie aufgehört hat.

Workflow wird daher eine interessante architektonische Puzzlespiel. Möchten Sie jede Aufgabe als separate und eigenständige wie möglich zu halten. Auf diese Weise erhalten Sie maximale Unterstützung für Unterbrechung und Wiederaufnahme. Sie sind jedoch durch die Prozessgrenze für den Informationsaustausch zwischen den Befehlen begrenzt.

In der Tat, ist was Windows PowerShell -Workflow viel nützlicher machen würde die Möglichkeit für eine Aktivität zum Beibehalten von Informationen in einem externen Speicher (wie SQL Server). Diese Art und Weise eine andere Tätigkeit könnte abholen und diese Informationen verwenden. Solch ein externer Speicher würde eine Art permanente, externe variabler Speicher geworden.

Leider anbieten nicht Windows PowerShell nativ so etwas. Es gibt keinen Grund, dass Sie so etwas auf eigene Faust erstellen konnte nicht.

Don Jones

**Don Jones**ist ein Windows PowerShell -MVP-Auszeichnung, Empfänger und als Redakteur beim TechNet Magazine. Er hat vier Bücher über Windows PowerShell Version 3, einschließlich freie Plätze auf Windows PowerShell -Remoting und Erstellen von HTML-Berichten in Windows PowerShellzusammen. Finden sie alle zur PowerShellBooks.com, oder Jones -Fragen in der Diskussionsforen auf PowerShell.org.

Verwandte Inhalte