我有一个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的特定答案,要么是无用的:
答案 0 :(得分:2)
不要使用$input
作为变量的名称,因为它是PowerShell中的自动变量(参见help about_Automatic_Variables
)。
确定可执行文件是否可以接受命令行参数,而不是停止或提示输入。如果可以的话,这显然是首选。
是否可以告诉PowerShell自动将输入发送到任意可执行文件取决于该可执行文件的设计。如果可执行文件允许您向其发送标准输入,则可以运行类似
的操作"test" | myexecutable.exe
在此示例中,PowerShell将提供字符串test
和返回作为可执行文件的标准输入。如果可执行文件接受标准输入,那么这将起作用。
如果可执行文件不使用标准输入,那么您将不得不做一些不同的事情,例如向窗口发送按键。我认为发送击键是最后的手段,也是一种不易自动化的脆弱解决方案。