如何让Powershell脚本回答用户输入的提示?

时间:2017-10-19 20:51:26

标签: powershell command-prompt

我有一个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的特定答案,要么是无用的:

1 个答案:

答案 0 :(得分:2)

  1. 不要使用$input作为变量的名称,因为它是PowerShell中的自动变量(参见help about_Automatic_Variables)。

  2. 确定可执行文件是否可以接受命令行参数,而不是停止或提示输入。如果可以的话,这显然是首选。

  3. 是否可以告诉PowerShell自动将输入发送到任意可执行文件取决于该可执行文件的设计。如果可执行文件允许您向其发送标准输入,则可以运行类似

    的操作
    "test" | myexecutable.exe
    

    在此示例中,PowerShell将提供字符串test和返回作为可执行文件的标准输入。如果可执行文件接受标准输入,那么这将起作用。

    如果可执行文件使用标准输入,那么您将不得不做一些不同的事情,例如向窗口发送按键。我认为发送击键是最后的手段,也是一种不易自动化的脆弱解决方案。