Chr*_*s F 5 powershell powershell-2.0
基于如何并行执行PowerShell函数多次?,我能够做到这一点,同时停止所有正在运行的作业。
# Run this in parallel
$stopService {
param($service)
Stop-Service -Name $service.name -Force
}
$services = Get-Services | Where-Oject {$_.name -like "*XYX_*"}
Foreach($service in Sservices) {
Start-Job -ScriptBlock $stopService -ArgumentList $service
}
$doSomethingElse
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能修改代码,以便我所有的并行作业先于我完成呢$doSomethingElse?有点像join()命令?
您可以捕获变量中PSRemotingJob返回的所有实例,然后使用或 using等待它们:Start-JobWait-JobReceive-Job -Wait -AutoRemoveJob
$jobs = foreach($service in $services) {
Start-Job -ScriptBlock $stopService -ArgumentList $service
}
Receive-Job $jobs -Wait -AutoRemoveJob
Run Code Online (Sandbox Code Playgroud)
还有其他替代方案,例如此答案中显示的替代方案,使用循环和WaitHandle.WaitAny方法
这个答案显示了一个类似的、更成熟的替代方案,使用一个函数来等待有进度的作业和一个可选的TimeOut参数。
| 归档时间: |
|
| 查看次数: |
2016 次 |
| 最近记录: |