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

时间:2017-05-08 15:52:03

标签: powershell automation expect

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

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

Do you agree to the license: YES
User name: myuid
Password: SuperSecretPassword`

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

我可以在* nix shell中使用expect轻松完成此操作,但是考虑到我需要运行.exe,这是不可能的。似乎没有"期望"相当于Windows,所以我很好奇这是否可以在PowerShell中完成?

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

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,如果它只是一行,你可以将一个字符串传递给一个例如。 "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~")