2016-08-10 4 views
0

Ich habe folgend:Erfassen von Benutzereingaben von einem Powershell-Workflow

Workflow Test { 
    $message = "Hey" 
    InlineScript{ 
     Write-Output $using:message 
     Read-Host 'Get user input before proceeding.' 
    } 
    InlineScript{ 
     Write-Output $using:message 
    } 
} 

Test 

Was ich im Gegenzug:

Ein Befehl, der Benutzer aufgefordert, schlug fehl, da das Host-Programm oder den Befehlstyp unterstützt keine Benutzerinteraktion.

Gibt es eine Möglichkeit, einen Workflow für die Benutzereingabe anzuhalten, bevor Sie fortfahren? Ich verwende Workflows, um parallele foreach zu unterstützen - aber ich möchte zwischen den Operationen pausieren.

Ich kann dies versuchen:

Workflow Test1 { 
    $message = "Hey" 
    InlineScript{ 
     Write-Output $using:message 
     Read-Host 'Get user input before proceeding.' 
    } 
} 

Workflow Test2 { 
    $message = "Hey" 
    InlineScript{ 
     Write-Output $using:message 
    } 
} 

Test1 
// wait for user input 
Test2 

Aber dann habe ich Konstanten dort wiederholt - $message - was nicht sehr trocken ist.

+0

Ich bin ziemlich sicher, dass dies nicht möglich ist. Workflows können "interaktiv" ausgelöst werden, aber es wird erwartet, dass sie nicht interaktiv ausgeführt werden und oft gegen mehrere verschiedene Maschinen gleichzeitig ausgeführt werden. Der Grund, warum Sie "InlineScript" sogar zur Unterstützung aller PowerShell-Befehle benötigen, ist, dass es sich um eine andere Umgebung handelt, sodass Sie sich diese Blöcke als in einem anderen Runspace ausgeführt vorstellen können. – briantist

+0

@briantist - Ich verstehe. Ich denke, ich könnte getrennte Workflows machen, aber dann muss ich alle meine Variablendeklarationen in jedem einzelnen wiederholen, was wirklich chaotisch erscheint. Irgendwelche Tipps dazu? Frage jetzt aktualisieren – RobVious

+0

Wenn der einzige Grund für die Verwendung eines Workflows die Parallelität ist, würde ich nur die Verwendung von Jobs oder [PoshRsJob] (https://github.com/proxb/PoshRSJob) empfehlen. – briantist

Antwort

1

Ein PowerShell-Workflow ist so konzipiert, dass er ohne Interaktion ausgeführt werden kann. Jeder Workflow wird als Job geplant, der in einer separaten PowerShell-Instanz ausgeführt wird.

Workflows sind so konzipiert, dass sie robust und parallel sind und die Eingabe von einer Person in der Mitte eines Workflows das Risiko erhöht, dass während der Ausführung etwas schief geht.

Sie können Parameter an einen Workflow übergeben, indem Sie das normale Schlüsselwort param verwenden, mit dem Sie alle Informationen erhalten, die Sie für die Ausführung des Arbeitsablaufs benötigen.

workflow DoStuff 
{ 
    param([string[]]$Value) 

    ... 
} 

Eine weitere Möglichkeit, Interaktivität nicht erfordern würde darüber nachdenken, wie man erkennen kann, wenn Powershell zur nächsten Operation weitergehen sollte stattdessen eine Person erforderlich ist, um.

Verwandte Themen