Powershell不是我的强项所以我有一个问题可能是直截了当但我无法找到明确的答案。
作为另一个流程的一部分,我需要在多个服务器上停止[do work]启动服务。我有这个工作,但希望提高效率,因为开始可能需要5-10分钟才能完成。现在它正在运行序列化,因此启动8个服务需要40多分钟。在进入下一步之前,线程启动命令然后检查以确保所有这些命令完成的最佳方法是什么?
答案 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.aspx和https://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都可用且完全相同。