0

我有一个正在开发的 powershell GUI。它调用一个批处理文件,该文件使用 psexec 卸载多个带有 $pc 参数的旧 java 安装。当它被调用时,我的 GUI 锁定了,但是我可以看到它在 ISE 中运行。有没有办法可以将批处理文件的输出转发到 GUI 上的多行文本框,以便您可以看到它仍在处理中?

TOM:我还没有将它输出到 GUI,这是我的问题。我的脚本中调用它的部分是:

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

脚本达到这一点后,我什至无法移动 GUI 窗口,即 Frozen,直到我在 Powershell ISE 的输出窗口中看到脚本完成

4

1 回答 1

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 的所有执行,在这种情况下,这一切都是徒劳的。

于 2012-02-07T17:50:56.400 回答