2017-05-08 93 views
1

我需要針對傳統應用程序自動執行一些任務。它沒有API,但供應商提供了一個.exe,我可以運行以執行鍼對該應用程序的各種任務。Powershell - 與可執行文件的命令行提示交互?

我可以在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

如果我沒記錯的話,如果它只是一條線,你可以通過管道將字符串轉換爲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~") 
+0

否定的。 Start-Process在單獨的命令提示符窗口中打開命令,然後SendKeys命令將輸入​​發送到我啓動它的PowerShell窗口。 – user3246693

+0

我也試過了,沒有使用Start-Process命令,可執行文件運行,提示我輸入。我手動輸入了所有輸入,可執行文件完成了它的工作,並且完成後,SendKeys命令將3個字符串輸出到PowerShell提示符。 – user3246693

+0

您可能需要使用'$ ID =(開始處理-PassThru).id''添加型-AssemblyName Microsoft.VisualBasic' '[Microsoft.VisualBasic.Interaction] ::使用AppActivate( 「$ ID」)' – BenH