【问题标题】:Pause script until simultaneous commands end暂停脚本,直到同时命令结束
【发布时间】:2016-06-24 04:37:39
【问题描述】:

我在 powershell 脚本中创建了两个作业:

$job1= Start-Job {
[Diagnostics.Process]::Start("service", $var1 $var2 $var3)
[Diagnostics.Process]::Start("service", $var1 $var2 $var3)
}

$job2= Start-Job {
[Diagnostics.Process]::Start("service", $var1 $var2 $var3)
[Diagnostics.Process]::Start("service", $var1 $var2 $var3)
}

我希望 job1 中的进程在开始 job2 之前完成。我试过等待工作,找工作 |等待作业,但是当我运行接收作业时,它显示作业已完成。我假设它认为它在作业在技术上运行后完成,即使打开了 2 个新的 cmd 窗口并且作业仍在运行。

如何让 powershell 识别这些窗口仍在打开/运行,以便它们在完成之前不会继续?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    把你的电话改成

    $p1 = [Diagnostics.Process]::Start("service", $var1 $var2 $var3)
    $p2 = [Diagnostics.Process]::Start("service", $var1 $var2 $var3)
    $p1.WaitForExit()
    $p2.WaitForExit()
    

    这将确保您的工作在开始的流程完成之前不会被视为完成。
    有了它,您就可以在$job1 上使用Wait-Job 来等待那里的进程完成。

    【讨论】:

    • 感谢 DAX 的回复。这部分完成了我需要它做的事情。是的,它使 cmd 窗口不会关闭并等待退出,但现在它不允许作业中的每个 [Diagnostics.Process] 并行运行。最好将 .WaitforExit() 应用于整个作业,或以某种方式应用于所有进程,而不是单独的进程。
    • 我进行了快速编辑,以便进程并行运行
    • 快速编辑成功了。感谢对此的快速响应!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2021-04-08
    • 2012-04-10
    • 2015-12-14
    • 2018-11-10
    相关资源
    最近更新 更多