问题描述
我有一个PowerShell脚本,它需要执行一个命令行可执行文件,该命令行可执行文件提示用户输入(没有命令行参数)。大概是这样的:
# promptsForInput.ps1
$someInput = Read-Host "Gimme some input"
# do something with $someInput
实际的可执行文件是编译后的二进制文件,我无法对其进行修改,但此示例脚本出于本问题的目的进行了修改。我的PowerShell脚本调用可执行文件:
# myScript.ps1
.promptsForInput.ps1
在运行时,系统提示我输入以下内容:
> .myScript.ps1
Gimme some input:
我需要能够在没有用户干预的情况下填写输入请求。当promptsForInput.ps1
提示用户输入时,我需要myScript.ps1
输入所需的值并继续执行脚本。
SO上的类似问题要么有特定于特定EXE的答案,要么无济于事:
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
用作变量名,因为这是PowerShell中的自动变量(请参见help about_Automatic_Variables
)。
确定可执行文件是否可以接受命令行参数,而不是停止或提示输入。如果它可用,显然是首选的。
是否可以告诉PowerShell自动将输入发送到任意可执行文件取决于该可执行文件的设计。如果可执行文件允许您向其发送标准输入,则可以运行类似
的代码"test" | myexecutable.exe
在本例中,PowerShell将字符串test
和返回作为标准输入提供给可执行文件。如果可执行文件接受标准输入,则这将起作用。
如果可执行文件不使用标准输入,则您必须执行一些不同的操作,如向窗口发送击键。我认为发送击键是最后的手段,也是一种不利于自动化的脆弱解决方案。