2016-07-25 11 views
3

私のシナリオでは、標準入力を受け取るpowershellスクリプトがあります。私がしたいのは、任意のコマンドラインを使用してサブプロセスを開始し、powershellスクリプトの標準入力をサブプロセスにリダイレクトすることです。つまり、標準入力をサブプロセスに渡したいだけです。powershellスクリプトのstdinをサブプロセスにリダイレクト

私はループでこれを行う方法についていくつかのアイデアを持っていますが、よりエレガントな方法がありますか?

+0

サブプロセスからstdoutを返信しますか?もしそうなら、スクリプトは一度に2つのことを待つ必要があるので、答えはかなり複雑です:スクリプトからのstdinとサブプロセスからのstdout。慎重でない場合は、出力が出てこない場合は、stdoutで待っているスクリプトを止めるのは簡単です。しかし、最初に、.NET [system.diagnostics.process]を見てサブプロセスを作成し、それを標準にリダイレクトすることをお勧めします –

+0

私の場合、私はサブプロセスからの戻りを待つ必要はありませんが、将来の読者にとって有益です。 – xaav

+0

あなたは次のような意味ですか? '$ input | &foo-bar'ですか? –

答えて

0

PowerShell.exeはスクリプトの実行を開始する前にすべての入力を待つため、完全な答えではありませんが、場合によってはこれで何らかの問題が発生することがあります。私はPowerShellを呼び出すプロセスがそのストリームを閉じないようにPowerShellが永遠に待っていた問題に遭遇しました。

解決策は、文書化されていないオプション(powershell.exe -InputFormat None)を使用して、バイト単位で手動で入力を読み取ることでした。一度に1バイト以上を読み取るすべてのメソッドは、少なくとも私が知る限り、永久にブロックすることができます。

おそらく非同期メソッドを使用して回避することができます。

関連する問題