2012-02-07 68 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" 
} 

后,我拿不动的GUI窗口,即冻结,直到后,我看到在输出窗口中的脚本完成对PowerShell的ISE

+1

您是否有一些示例代码来显示您当前如何输出到GUI?可能会阐明它为什么锁定的原因。 – 2012-02-07 16:51:32

回答

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冻结并不是什么大事,如果它是一个选定的选项,那么用户应该期望该过程必须完成才能继续。我主要希望它输出...... well..DOS回声到GUI – Trae 2012-02-07 17:58:01

+0

内的多行文本框我会明智地使用get-member对你手边的对象进行判断,以确定它们的类型和属性。如果您使用的是Windows窗体或其他标准UI框架,则应该能够在线查找有关向该.NET对象类型的多行文本框添加文本的示例。即使样本是用C#编写的,它也应该是一个相当简单的PowerShell转换,因为所有的.NET对象操作都是相同的。例如:$ textbox.Text + =“新东西” – 2012-02-07 18:58:16

+0

好吧,在这种情况下;我希望能有如 $ txtBox = {cmd/c“script.bat”>> $ txtbox.txt} 显然不是正确的格式,但你明白了 – Trae 2012-02-07 19:23:09