Powershell - 与可执行文件的命令行提示交互?

标签 powershell automation expect

我需要针对遗留应用程序自动执行一些任务。它没有 API,但供应商提供了一个 .exe,我可以运行它来针对应用程序执行各种任务。

我可以在 PowerShell 中调用 .exe 就好了,但是在调用它之后会提示输入以下内容:

您是否同意许可:是
用户名:myuid
密码:SuperSecretPassword`

我可以在命令提示符下以交互方式运行它,并根据提示手动输入请求的输入,但我需要在脚本中自动执行此操作。 .exe 也不接受任何命令行参数(它是一个旧应用程序),我可以传递的唯一参数是我想对应用程序执行的命令。 .exe 仅基于命令行,没有 GUI,因此 GUI 自动化工具也不是一个选项。

我可以用 expect 轻松做到这一点在 *nix shell 中,但是考虑到我需要运行一个 .exe,这是不可能的。在 Windows 中似乎没有“期望”等价物,所以我很好奇这是否可以在 PowerShell 中完成?

注意:对于 Windows 脚本,我更喜欢 PowerShell,但如有必要,可以使用 VBScript。

最佳答案

如果我没记错的话,如果它只是一行,您可以将字符串通过管道传输到 exe,例如。 "asdf" | example.exe ,但它是多行输入,您可能需要使用 SendKeys

Add-Type -AssemblyName 'System.Windows.Forms'
$ID = (Start-Process example.exe -PassThru).id 
Sleep 1
Add-Type -AssemblyName Microsoft.VisualBasic 
[Microsoft.VisualBasic.Interaction]::AppActivate([Int32]$ID)
[System.Windows.Forms.SendKeys]::SendWait("YES~")
[System.Windows.Forms.SendKeys]::SendWait("myuid~")
[System.Windows.Forms.SendKeys]::SendWait("SuperSecretPassword~")

关于Powershell - 与可执行文件的命令行提示交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43852056/

相关文章:

Powershell - 普通变量的行为类似于引用变量

c# - 是否可以将逻辑添加到编码 UI (CUIT) 自动化测试中?

algorithm - 将设备映射到电源 socket 的有效方法?

bash - 在 shell 脚本的 while 循环中运行 expect 命令

linux - 期望脚本返回 "missing close-bracket"

ruby - 如何确定 PTY.spawn 何时在 ruby​​ 脚本中完成,然后开始新进程

PowerShell函数参数验证

powershell - 为什么Write-Output在PowerShell类方法中不起作用?

c# - 尝试使用 PowerShell 列出 Azure 文件服务中的共享时身份验证失败

c# - 是否有任何使用.NET 的自动化测试示例源代码