我有一个我正在研究的powershell GUI。它调用一个批处理文件,该文件使用psexec以$ pc参数卸载多个旧的Java安装。当它被称为我的GUI锁定,但我可以看到它在ISE中运行。有没有办法可以将批处理文件的输出转发到GUI上的多行文本框,以便您可以看到它仍在处理?
TOM:我还没有输出到GUI,这是我的问题。我的脚本部分称之为:
if ($unjava=1){
cmd /c "d:\tool\scripts\fixit\WAITjremover.bat $pc"
}
在脚本遇到这一点之后,我甚至无法移动GUI窗口,即冻结,直到我在Powershell ISE的输出窗口中看到脚本完成
答案 0 :(得分: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的执行,在这种情况下,这一切都是徒劳的。