Windows PowerShell: Erinnert an einen Workflow

Jeden Monat in diesem Jahr präsentieren sich 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

Arbeitsabläufe Aussehen und Verhalten sehr Windows PowerShell -Funktionen oder Skripts — aber sie sind nicht. Diese Ähnlichkeit ist nur oberflächlich und nicht vielleicht sogar ganz durch die Haut erweitern.

Du musst immer daran denken, dass Windows PowerShell Arbeitsabläufe in einem völlig separaten Technologie übersetzen müssen — Windows Workflow Foundation (WF). Das bedeutet, dass Sie nur Dinge tun können, die in WF dupliziert werden können. Code läuft dann in eine ganz andere Art von Umgebung, die eigene Regeln und Einschränkungen hat.

Führen Sie ein Skript als workflow

Der einfachste Weg, einen Workflow auszuführen ist einfach nur eine standard Windows PowerShell -Skript als Workflow ausführen. Hierzu können Sie mithilfe des Befehls Invoke-AsWorkflow. Dieser Befehl lebt im Modul PSWorkflow, obwohl Windows PowerShell Version 3 erkennen und führen Sie den Befehl ohne Sie müssen explizit das Modul zuerst geladen werden sollten. Dieser Befehl schließt im Wesentlichen das gesamte Skript in einem Block InlineScript, was bedeutet, dass es in WF als einem einzigen Schritt ausgeführt wird.

Das bedeutet, dass Sie nicht viel zu Windows PowerShell Workflow Einschränkungen sorgen müssen. Allerdings erhalten Sie auch nicht nutzen bestimmter Windows PowerShell -Workflow-Funktionen, wie die Möglichkeit, einen unterbrochenen Prozess fortsetzen. Ihre "Prozess" besteht in diesem Fall das gesamte Skript läuft in einem einzigen Schritt. Es gibt keine Möglichkeit, auf halbem Weg durch wieder aufzunehmen, wenn Sie anhalten oder unterbrechen müssen. Hier ist ein Beispiel, in dem ich einen Skriptblock mit ein paar Befehlen erstellt und anschließend als Workflow ausgeführt:

$script = { $name = Get-Content Env:\COMPUTERNAME $name | Out-File c:\MyName.txt Get-Service } Invoke-AsWorkflow -Expression $script -PSComputerName DC,CLIENT

Ein Grund, warum ich hier eine Variable verwendet wurde, nachzuweisen, dass WF all dies als eine einzelne InlineScript ausgeführt wird. Denken Sie daran, das jeder Befehl WF ausgeführt wird, erhält seine eigene, frische Umgebung. Es gibt keine integrierte Methode, um Daten zwischen Befehle beibehalten. Das bedeutet, dass Variablen nativ ziemlich nutzlos sind. Da diese ganze Sache implizit als einen einzigen Schritt InlineScript eingebunden ist, wird die Variable, die ich erstellt jedoch im ganzen beibehalten.

Warum würden Sie stören? Windows PowerShell Workflow bietet Ihnen noch ein paar zusätzliche Vorteile. Es gibt eine bestimmte Anzahl von Parametern, die von allen Workflows gemeinsam. Diesen können Sie Dinge wie Ziel-Computer-Namen angeben und so weiter. Ihr Skript erben eine Basisinfrastruktur für Multi-Computer arbeiten. Für lang andauernde-Skripts können Sie kick-off eines Workflows, dann trennen Sie vom remote-Computer während der Workflow weiterhin ausgeführt, wird die schön.

Formale Workflow-syntax

Hier ist ein sehr einfacher Workflow:

Workflow New-Server { Get-Content -Path Env:\COMPUTERNAME | Out-File -FilePath C:\MyName.txt Get-NetAdapter -Physical } New-Server -PSComputerName CLIENT,DC

Workflows sind eine Art von Windows PowerShell -Befehl, wie ein Cmdlet, das Skript oder die Funktion. Dieses sein der Fall, können Sie diese ausführen einfach durch Aufrufen von ihren Namen, wie ich in der letzten Zeile dieses Beispiels getan habe. Denken Sie daran, dass alle Arbeitsabläufe eine bestimmten Anzahl von integrierten Parameter wie –PSComputerName erben. Auch die Arbeitsabläufe setzen auf dem Windows PowerShell -Remoting-Feature, das auf beiden Computern in diesem Beispiel aktiviert ist.

Das praktische Ergebnis ist, dass beide Befehle im Workflow direkt auf den Remotecomputern, mit den Ergebnissen kommen zurück auf meinem Computer ausgeführt werden. Ich habe keine von dem code oder sogar Erstellen eines Computer-Name-Parameters. Ich habe nicht aufzählen die Computernamen, Erstellen von Verbindungen oder irgendetwas anderes. Windows PowerShell Workflow tut es für mich. Es gibt absolut nichts in diesem Skript, ich nicht haben, ohne Windows PowerShell -Workflow erreicht konnte — es müsste nur ein bisschen mehr Arbeit meinerseits.

Sie werden bemerken, dass ich in meinen Workflow heraus die Befehlsnamen geschrieben habe. Ich habe auch benannte Parameter in jeder Instanz verwendet. Das ist immer eine bewährte Methode in jeder Windows PowerShell -Skript, aber es ist obligatorisch in einem Workflow. Positionelle Parameter kann nicht verwendet werden. Musst du alles buchstabieren, oder Sie erhalten eine Fehlermeldung.

Jetzt schauen Sie sich diesen Workflow (nicht, die Sie benötigen, die PSWorkflow-Sitzung in Ihrer Schale-Instanz in Reihenfolge für das Keyword "Workflow" rechtmäßig zu importieren):

Workflow New-Server { $name = Get-Content -Path Env:\COMPUTERNAME Get-Content -Path Env:\COMPUTERNAME | Out-File -FilePath C:\MyName.txt Get-NetAdapter -Physical $name | Out-File -FilePath C:\MyOtherName.txt } New-Server -PSComputerName CLIENT,DC

Wenn ich diesem Beispiel schrieb ich dachte: "MyOtherName.txt leer sein." Denken Sie daran, dass der Inhalt der den Workflow als separaten Befehl, mit keinen gemeinsamen Kontext zwischen ihnen ausgeführt. Wenn ich in diesem Beispiel lief, aber funktionierte es. Der Name des Computers tatsächlich sowohl MyName.txt als auch MyOtherName.txt verfasst. Wie geht das?

Windows PowerShell tut eigentlich eine Menge unter der Motorhaube Sachen zu versuchen und sicherzustellen, dass Sie erhalten die Ergebnisse, die Sie erwarten von einem Workflow. Beispielsweise wird ein "normale" Workflow-Befehl in einer ganz bestimmten Weise geschrieben. WF kann nicht nativ nur irgendeine alte Windows PowerShell -Cmdlet ausgeführt. Das Windows PowerShell -Team bietet WF-Entsprechungen für eine riesige Liste von systemeigenen Cmdlets, so es oft eine Entsprechung zwischen Cmdlets und WF-Aktivitäten gibt.

Wenn Sie ein Cmdlet, die eine entsprechende Tätigkeit nicht verwenden, schließt Windows PowerShell implizit Code innerhalb einer WF InlineScript-Aktivität. Das hat die Wirkung WF Windows PowerShellausführen, führen Sie den Befehl Windows PowerShell und nehmen Sie dann die Ergebnisse zurück in WF zu machen. So funktioniert eine Menge Sachen, die funktionieren "sollten nicht", da Windows PowerShell es zusammen für Sie hackt.

Die Gefahr liegt darin, dass die Problembehandlung unglaublich schwierig werden kann, denn Sie werden nicht immer in der Lage zu sehen, was Windows PowerShell unter der Haube tut. Bei diesem Beispiel gewährleistet Windows PowerShell auf oberster Ebene Variablen im gesamten Workflow beibehalten.

Wohin wir gehen weiter

Ob Sie es glauben oder nicht, habe Sie schon genug, um einfache Workflows mit dem Schreiben beginnen. Kann man diese jedem Computer Ziel, wo Sie Windows PowerShell Version 3 installiert und Remoting aktiviert haben. Einer der Gründe für die Remoting Aktivierung ist, dass er eine Sitzungskonfiguration schafft, die Windows PowerShell -Workflow verwendet. Wenn Sie aktiviert haben Remoting auf einem Computer mit Windows PowerShell Version 2 und später dann Version 3 installiert, werden Sie wollen Enable-PSRemoting um die erforderliche Konfiguration erstellen erneut ausführen.

Halten Sie Ihre Workflows ziemlich einfach. Führen Sie eine Sequenz von Befehlen und tun nicht viel Phantasie Manöver. Sie sollten keine Probleme haben, und Sie erhalten die eingebaute Windows PowerShell -Workflow-Remoting, Multi-Computer-targeting und andere Funktionen nutzen.

Nächsten Monat werde ich immer beginnen noch komplizierter. Ich schau den gravierenden Unterschieden zwischen einem Workflow und ein normales Windows PowerShell -Skript, und erkunden einige weitere interessanten Funktionen Windows PowerShell -Workflows.

Don Jones

Don Jonesist ein Windows PowerShell MVP Award Gewinner und Redakteur beim TechNet Magazine. Er hat vier Bücher über Windows PowerShell Version 3, darunter mehrere kostenlose Titel zum Erstellen von HTML-Berichten in Windows PowerShell und Windows PowerShell -Remoting zusammen. Sie finden alles auf PowerShellBooks.com, oder Jones Ihre Frage in der Diskussionsforen auf PowerShell.org.

Verwandte Inhalte