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

人气:1,163 发布:2022-10-16 标签: 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的答案,要么无济于事:

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和返回作为标准输入提供给可执行文件。如果可执行文件接受标准输入,则这将起作用。

如果可执行文件不使用标准输入,则您必须执行一些不同的操作,如向窗口发送击键。我认为发送击键是最后的手段,也是一种不利于自动化的脆弱解决方案。

219