2012-02-07 24 views
0

私は作業中のPowerShell GUIを持っています。 psexecを使用して$ pc引数を使用して複数の古いjavaインストールをアンインストールするバッチファイルを呼び出します。私のGUIがロックアップされたとき、私はそれがISEで動作しているのを見ることができます。バッチファイルの出力をGUI上の複数行のテキストボックスに転送して、まだ処理中であることがわかる方法はありますか?PowerShell - 複数行のテキストボックスに戻り値を出力する

TOM:まだGUIに出力していない、それは私の質問です。それを呼び出す私のスクリプトの一部は次のとおりです。

if ($unjava=1){ 
    cmd /c "d:\tool\scripts\fixit\WAITjremover.bat $pc" 
} 

スクリプトはこの点をヒットした後、私も、私はPowerShellのISEの出力ウィンドウにスクリプト仕上がりを見た後まで、冷凍つまり、GUIウィンドウを移動することはできません

+1

現在、GUIにどのように出力しているかのサンプルコードがありますか?なぜそれがロックされているのかについてのいくつかの光を当てるかもしれません。 –

答えて

0

私はUIと同じスレッドで上記の行を実行しているため、UIがフリーズする理由を推測します。 UIはCPUサイクルを取得していないため再描画できません。スレッドのすべてのサイクルはcmd呼び出しに向かいます。お互いに干渉しないように、バックグラウンド実行を図面から分割する必要があります。

あなたが仕事中にCMDを実行してみて -

$j = start-job { param($unjava,$pc); if ($unjava=1) { cmd /c "d:\tool\scripts\fixit\WAITjremover.bat $pc" } } -argumentlist $unjava,$pc 
wait-job $j 

私はこれにプラスないんだけど、それはそれはにジョブを待ちながら待機ジョブはUIのすべての実行を停止することが可能ですこの場合、これはまったく無用です。

+0

UIのフリーズはそれほど大きな問題ではありません。選択したオプションであれば、プロセスを続行する必要があります。私は主に、GUIの中の複数行のテキストボックスに... well..DOSのエコーを出力したいと思っています。 – Trae

+0

手元にあるオブジェクトのget-memberを適切に使用して型とプロパティを決定します。 Windowsフォームやその他の標準的なUIフレームワークを使用している場合は、.NETオブジェクトタイプの複数行のテキストボックスにテキストを追加すると、サンプルをオンラインで見つけることができます。サンプルがC#にあっても、.NETオブジェクトの操作はすべて同じになるため、PowerShellへの変換は非常に簡単です。例:$ textbox.Text + = "新しいもの" –

+0

この状況では、 $ txtBox = {cmd/c "script.bat" >> $ txtbox.txt} 明らかに正しい形式ではありませんが、あなたは考えを得る – Trae

関連する問題