Powershell不是我的强项,所以我有一个问题,这个问题可能很直接,但无法找到明确的答案。
作为另一个过程的一部分,我需要停止跨多个服务器的workstart服务。我有这个工作,但希望让它更有效率,因为启动可能需要5-10分钟来完成。现在它是序列化运行的,所以启动8个服务需要40+分钟。将start命令线程化,然后检查以确保在进入下一步之前完成所有操作的最好方法是什么?
发布于 2016-08-28 21:37:41
您可以将服务操作包装在每个目标服务器的一个作业中,并等待所有作业完成。
要创建作业:使用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都是可用的,并且工作方式(相当)相同。
https://stackoverflow.com/questions/39191279
复制相似问题