我需要针对遗留应用程序自动执行某些任务。它没有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。
答案 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~")