电源外壳。并行运行任务。等待所有人

时间:2016-08-28 12:28:54

标签: powershell

Powershell不是我的强项所以我有一个问题可能是直截了当但我无法找到明确的答案。

作为另一个流程的一部分,我需要在多个服务器上停止[do work]启动服务。我有这个工作,但希望提高效率,因为开始可能需要5-10分钟才能完成。现在它正在运行序列化,因此启动8个服务需要40多分钟。在进入下一步之前,线程启动命令然后检查以确保所有这些命令完成的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以将服务操作包装在每个目标服务器的一个作业中,并等待所有作业完成。

创建作业:foreach ($Server in $Servers) { Start-Job { param($ServiceName); Stop-Service $ServiceName } -Name $Server -ArgumentList $ServiceName }或切换到CmdLet Start-Service以启动服务。

比照。 https://technet.microsoft.com/en-us/library/hh849698.aspx

等待工作完成:Get-Job | Wait-Job

比照。 https://technet.microsoft.com/en-us/library/hh849693.aspxhttps://technet.microsoft.com/en-us/library/hh849735.aspx

要获取“转到下一步”的作业结果,请检查:Get-Job | Receive-Job

比照。 https://technet.microsoft.com/en-us/library/hh849718.aspx

在这里,您将找到使用可能对您有帮助的作业并行执行的示例:http://www.get-blog.com/?p=22

据我所知,自v2以来,所有这些CmdLet都可用且完全相同。