PowerShell - 将返回值输出到多行文本框中

发布于 2025-01-03 12:18:37 字数 377 浏览 0 评论 0原文

我正在开发一个 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 上的输出窗口中看到脚本完成之后

I have a powershell GUI i'm working on. It calls a batch file that uses psexec to uninstall multiple old java installs with $pc argument. When it's called my GUI locks up, however i can see it running in ISE. Is there a way i can forward the output of the batch file to a multiline text box on the GUI so you can see that it is still processing?

TOM: I do not have it outputing to the GUI yet, that is my question. The part of my script that calls it is:

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

After the script hits this point, i cannot even move the GUI windows, ie Frozen, until after i see the script finish in the output window on the Powershell ISE

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

悍妇囚夫 2025-01-10 12:18:37

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

I'm going to guess that the reason the UI freezes is because you're running the above line in the same thread as the UI. The UI won't be able to re-draw because it isn't getting CPU cycles - all cycles for the thread are going to the cmd call. You're going to need to split up the background execution from the drawing so that they don't interfere with each other.

You may try running the cmd within a job -

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

I'm not positive on this, it's possible that the wait-job will halt all execution of the UI while it waits for the job to complete, in which case this is all for naught.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文