2017-10-19 41 views
0

私は、コマンドラインパラメータを持たないユーザ入力を要求するコマンドライン実行可能ファイルを実行する必要のあるPowershellスクリプトを用意しています。このような何か:Powershellスクリプトを使ってユーザーの入力を求めるプロンプトを出すには?

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

実際の実行可能ファイルは、私が変更することはできませんコンパイルされたバイナリであるが、この例のスクリプトは、この質問の目的のために行います。私のPowerShellスクリプトが実行可能ファイルを呼び出します。私は、ユーザーの介入なしにその入力要求に記入できるようにする必要があり

> .\myScript.ps1 
Gimme some input: 

:実行時に

# myScript.ps1 
.\promptsForInput.ps1 

、Iは、入力何かにプロンプ​​トが表示されます。 promptsForInput.ps1がユーザーの入力を促す場合、必要な値を入力してスクリプトの実行を続行するには、myScript.ps1が必要です。いずれかの特定のexeファイルに特定の答えを持っている、またはSO上

同様の質問には、そうでない場合は役に立たないです:

答えて

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の制御下にありません。 –

関連する問題