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

asg*_*ant 6 powershell command-prompt

我有一个 Powershell 脚本,它需要执行一个命令行可执行文件来提示用户输入(没有命令行参数)。像这样的东西:

# promptsForInput.ps1
$someInput = Read-Host "Gimme some input"
# do something with $someInput
Run Code Online (Sandbox Code Playgroud)

实际的可执行文件是一个编译后的二进制文件,我无法修改,但是这个示例脚本是为了这个问题。我的 Powershell 脚本调用可执行文件:

# myScript.ps1
.\promptsForInput.ps1
Run Code Online (Sandbox Code Playgroud)

在运行时,我被提示输入一些东西:

> .\myScript.ps1
Gimme some input:
Run Code Online (Sandbox Code Playgroud)

我需要能够在没有用户干预的情况下填写该输入请求。当promptsForInput.ps1提示用户输入时,我需要myScript.ps1输入所需的值并继续执行脚本。

关于 SO 的类似问题要么有特定于特定 exe 的答案,要么没有帮助:

Bil*_*art 5

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

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

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

    "test" | myexecutable.exe
    
    Run Code Online (Sandbox Code Playgroud)

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

    如果可执行文件并没有使用标准输入,那么你将不得不做这样发送键击到窗口不同的东西。我认为发送击键是最后的手段,也是一种不适合自动化的脆弱解决方案。

  • 如果有多行输入,可以用`\`r\`n`分隔;例如``"第 1 行`r`nLine2"``。但同样:这完全取决于可执行文件是否接受标准输入。这不受 PowerShell 的控制。 (2认同)