2017-10-19 123 views
0

我有一個Powershell腳本,需要執行一個命令行可執行文件,提示用戶輸入(其中沒有命令行參數)。事情是這樣的:如何使Powershell腳本回答用戶輸入的提示?

# promptsForInput.ps1 
$someInput = Read-Host "Gimme some input" 
# do something with $someInput 

實際的可執行文件是編譯好的二進制,我不能修改,但對這個問題的目的,本示例腳本做。我的PowerShell腳本調用可執行文件:

# myScript.ps1 
.\promptsForInput.ps1 

在運行時,我得到提示輸入的東西:

> .\myScript.ps1 
Gimme some input: 

我需要能夠填補,而無需用戶干預輸入請求。當promptsForInput.ps1提示用戶輸入時,我需要myScript.ps1輸入所需的值並繼續腳本執行。

上SO要麼針對特定的exe答案,或類似的問題,否則無益:

回答

0
  1. 請勿使用$input作爲變量的名稱,因爲這是PowerShell中的自動變量(請參閱help about_Automatic_Variables)。

  2. 確定可執行文件是否可以接受命令行參數,而不是停止或提示輸入。如果可用,這顯然是首選。

  3. 是否可以讓PowerShell自動將輸入發送到任意可執行文件取決於該可執行文件的設計。如果可執行文件允許你標準輸入發送給它,你可以運行像

    "test" | myexecutable.exe 
    

    在這個例子中,PowerShell的將提供的字符串test和回報標準輸入的可執行文件。如果可執行文件接受標準輸入,那麼這將起作用。

    如果可執行文件不是而不是使用標準輸入,那麼您將不得不做一些不同的操作,例如發送按鍵到窗口。我認爲發送按鍵是最後的解決方案,並且不易自動化。

+0

'$ input'只是用於這個例子(我會改變它)。就像我說的那樣,被調用的實際程序是一個二進制文件。 – asgallant

+0

有沒有辦法將管道方法擴展到更多輸入?假設'promptsForInput.ps1'要求多個輸入,''foo「| 「酒吧」| 。\ promptsForInput.ps1'(顯然)不起作用,是否有一種語法? – asgallant

+0

如果你有多行輸入,你可以用'\'r \'n'分開;例如'''1號線''無線2'''。但是,這又完全取決於可執行文件是否接受標準輸入。這不在PowerShell的控制之下。 –