PowerShell的 - 具有可执行的命令行提示互动?(Powershell - Interact

2019-09-29 07:49发布

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

我可以在PowerShell就好调用的.exe,但调用它后,会提示以下输入:

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

我可以从命令提示符下就好了交互运行这和提示手动输入请求的输入,但我需要一个脚本自动化此。 .exe文件不接受这方面的任何命令行参数是(这是一个旧的应用程序),我可以传递的参数包括我想执行对应用程序的命令。 该.exe文件是基于它没有GUI,只有命令行,所以GUI自动化工具是不是一种选择,无论是。

用我能做到这一点很容易expect在* nix的外壳,但因为我有一个.exe文件我需要运行,这是不可能的。 似乎没有成为一个“期望”相当于在Windows,所以我很好奇,如果这可以在PowerShell中实现呢?

注意:对于Windows脚本我喜欢PowerShell中,但如果需要的话可以利用的VBScript。

Answer 1:

如果我没有记错,如果它只是一条线,你可以通过管道将字符串转换为EXE如。 "asdf" | example.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 - Interact with executable's command line prompts?