当前位置: 首页 > 知识库问答 >
问题:

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

孔安阳
2023-03-14

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

# promptsForInput.ps1
$someInput = Read-Host "Gimme some input"
# do something with $someInput

实际的可执行文件是一个编译过的二进制文件,我不能修改它,但是这个示例脚本可以解决这个问题。我的Powershell脚本调用可执行文件:

# myScript.ps1
.\promptsForInput.ps1

在运行时,我会被提示输入一些内容:

> .\myScript.ps1
Gimme some input:

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

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

  • 如何在强力外壳脚本中填写提示
  • 电源外壳:卸载具有用户输入提示的软件
  • 如何在 PowerShell 中“应答”控制台输入提示(在代码中)
  • 如何在电源外壳中写入用户输入

共有2个答案

伍昱
2023-03-14

下面是我用来运行批处理文件并提供输入的示例

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
Start-Process -FilePath C:\myexecbatchfile.bat

# Wait the application start for 2 sec 
Start-Sleep -m 2000
 
# Send keys
[System.Windows.Forms.SendKeys]::SendWait("input1")
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
Start-Sleep -m 3000

[System.Windows.Forms.SendKeys]::SendWait("input2")
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
韩耘豪
2023-03-14

> < li>

不要使用< code>$input作为变量的名称,因为那是PowerShell中的自动变量(请参阅< code > help about _ Automatic _ Variables )。

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

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

"test" | myexecutable.exe

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

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

 类似资料:
  • 问题内容: 我遇到一种情况(在硒测试期间),在这种情况下,用户将收到安全代码。然后,用户必须先输入安全密码,然后才能继续操作。 我不太确定如何获得用户输入的值。我浏览了硒文档,并提出了这个建议。不幸的是,它并不是很有效。 有人可以指出我正确的方向吗? 问题答案: 似乎您必须先接受并关闭提示,然后才能存储和使用该值

  • 问题内容: 我有一种情况(在selenium测试期间),在这种情况下,用户将收到安全代码。然后,用户必须先输入安全代码,然后才能继续操作。 我不太确定如何获得用户输入的值。我浏览了selenium文档,并提出了这个建议。不幸的是,它并不是很有效。 有人可以指出我正确的方向吗? 问题答案: 似乎您必须先接受并关闭提示,然后才能存储和使用该值

  • 问题内容: 是否有可能让bash脚本自动处理通常会以默认操作呈现给用户的提示?目前,我正在使用bash脚本调用内部工具,该工具将向用户显示提示(提示输入Y / N)以完成操作,但是我编写的脚本必须完全“放手”,因此我需要一种发送到提示符的方法,以允许程序继续执行。这可能吗? 问题答案: 这不是“自动完成”,而是自动化。一种用于这些事情的常用工具称为Expect。 您也可能只需要通过管道输入就能摆脱

  • 问题内容: 我正在编写一个提示输入的函数,然后根据输入返回不同的结果,然后再次要求输入。我已经得到它返回正确的值,但是我不确定如何使它再次提示输入。 这是该函数的实际代码: 在其中包含return的每一行中,它只是在调用先前定义的函数。的和是词典,前面所定义。 我只能使用内置函数。 问题答案: 我会用while循环来做。像这样:

  • 问题内容: 我正在编写一个python脚本,该脚本可以检查各种条件并相应地运行powershell脚本,以帮助我自动完成从Windows XP到Windows 7的迁移。powershell脚本提供了自己的输出,可让用户了解发生的情况。我想获取powershell脚本的输出并将其打印为python脚本的输出。我环顾了一些问题,这些问题似乎想做同样的事情,但似乎对我没有帮助。最初我尝试使用 如此处的

  • 问题内容: 我想运行一条命令,提示我输入yes / no或y / n或其他。如果我只是运行该命令,那么它将停止并要求我输入。当我键入所需的内容时,脚本将继续工作。如何自动响应提示? 问题答案: 从版本开始,Fabric提供了一种适当管理此问题的方法。 Fabric文档中有关提示的部分说: 提示字典允许用户控制交互式提示。如果在命令的标准输出流中找到字典中的键,Fabric将自动使用相应的字典值进行