2017-10-19 16 views
0

Ich habe ein Powershell-Skript, das eine Befehlszeilen-ausführbare Datei ausführen muss, die Benutzereingaben verlangt (für die es keinen Befehlszeilenparameter gibt). Etwas wie folgt aus:Wie kann ein Powershell-Skript eine Eingabeaufforderung für Benutzereingaben beantworten?

# promptsForInput.ps1 
$someInput = Read-Host "Gimme some input" 
# do something with $someInput 

Die eigentliche ausführbare ist eine kompilierte binäre, die ich nicht ändern kann, aber dieses Beispiel Skript zu tun für die Zwecke dieser Frage. Mein Powershell-Skript ruft die ausführbare Datei:

# myScript.ps1 
.\promptsForInput.ps1 

Zur Laufzeit, bekomme ich Aufforderung zur Eingabe von etwas:

> .\myScript.ps1 
Gimme some input: 

Ich brauche ohne Benutzereingriff in dieser Eingabeaufforderung füllen zu können. Wenn promptsForInput.ps1 zur Benutzereingabe auffordert, brauche ich myScript.ps1, um den erforderlichen Wert einzugeben und mit der Skriptausführung fortzufahren.

ähnliche Fragen auf SO entweder Antworten haben spezifisch für die jeweilige exe, oder auf andere Weise nicht hilfreich:

Antwort

0
  1. Verwenden Sie nicht $input als Namen einer Variablen, da dies eine automatische Variable in PowerShell ist (siehe help about_Automatic_Variables).

  2. Bestimmen Sie, ob die ausführbare Datei Befehlszeilenargumente akzeptieren kann, statt anzuhalten oder nach Eingabeaufforderung zu fragen. Dies ist offensichtlich bevorzugt, wenn es verfügbar ist.

  3. Ob PowerShell automatisch Eingaben an eine beliebige ausführbare Datei senden kann, hängt vom Design dieser ausführbaren Datei ab. Wenn die ausführbare Datei können Sie die Standardeingabe, um es zu senden, können Sie so etwas wie

    "test" | myexecutable.exe 
    

    In diesem Beispiel ausführen, wird bieten Powershell die Zeichenfolge test und eine Rückkehr als Standardeingabe an die ausführbare Datei. Wenn die ausführbare Datei eine Standardeingabe akzeptiert, funktioniert dies.

    Wenn die ausführbare Datei nicht Standardeingabe verwendet, dann müssen Sie etwas anderes tun, wie senden Tastenanschläge an das Fenster. Ich denke, dass Tastenanschläge der letzte Ausweg und eine spröde Lösung sind, die nicht automatisierungsfreundlich ist.

+0

'$ input' wurde nur für das Beispiel verwendet (ich werde es ändern); Wie ich schon sagte, das eigentliche aufgerufene Programm ist eine Binärdatei. – asgallant

+0

Gibt es eine Möglichkeit, die Pipe-Methode auf mehr Eingaben zu erweitern? Angenommen, 'promptsForInput.ps1' fragt nach mehreren Eingaben,' "foo" | "Bar" | . \ promptsForInput.ps1' (offensichtlich) wird nicht funktionieren, gibt es eine Syntax, die wird? – asgallant

+0

Wenn Sie mehrere Eingabezeilen haben, können Sie mit '\' r \ 'n' trennen; z.B. '' "Zeile 1'r'nLine2" ''. Aber nochmal: Das hängt ganz davon ab, ob die ausführbare Datei die Standardeingabe akzeptiert. Dies unterliegt nicht der Kontrolle von PowerShell. –

Verwandte Themen