【发布时间】:2013-09-13 10:32:18
【问题描述】:
我目前正在尝试使用 Powershell 连接到远程桌面,在该桌面上运行程序,然后注销。然后,我正在检查跨文件共享运行该命令的输出。基本上这意味着 PowerShell 在继续之前应该等待该过程完成。
阅读后,我一直在尝试使用 Start-Process -Wait 选项来确保它等待进程运行。但是,此脚本必须作为计划任务运行,并且似乎只要在用户未登录时运行脚本时,-wait 就不起作用,并且脚本会继续运行而不会完成该过程。我已经尝试了几种不同的等待选项,但显然我必须在用户注销时运行计划任务来测试它,并且测试会让人筋疲力尽。这是我当前执行此操作的代码行:
$proc = $(start-process $path -Wait)
请注意,我已尝试使用 -NoNewWindow 命令,但它在我的 PowerShell 版本中不可用。
任何人对如何让它等待进程有任何其他想法?
【问题讨论】:
-
你看过使用作业和 wait-job 命令吗?
-
我有,但遇到了同样的问题。运行命令的行立即声明它已完成,因此 wait-job 命令的作用与 -wait 相同(当然,仅在用户未登录时再次执行)。
-
经过排查,找到了问题的根源。通过作业或通过启动进程启动进程时,调用启动进程后进程“实际”启动需要 3 秒。所以当调用等待时,它看到进程不存在,所以它认为它已经完成(而不是还没有开始)。下面列出的 .NET 方法可以防止这种情况发生。