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:
- How to fill the prompt in powershell script
- Powershell: Uninstall Software that has prompts for user input
- How to "answer" a console input prompt in PowerShell (in the code)
- How to write to user input in powershell
'$ 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
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
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. –