gpt4 book ai didi

powershell - 在 Powershell 中,如何等待并行作业完成后再继续?

转载 作者:行者123 更新时间:2023-12-05 01:04:49 24 4
gpt4 key购买 nike

基于 How to execute a PowerShell function several times in parallel? ,我可以做到这一点,同时停止所有正在运行的作业。

# 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

但是如何修改代码,以便我的所有并行作业在我 $doSomethingElse 之前先完成?有点像 join() 命令?

最佳答案

您可以捕获 PSRemotingJob 的所有实例Start-Job 在变量中返回,然后使用 Wait-Job 等待它们或使用 Receive-Job -Wait -AutoRemoveJob :

$jobs = foreach($service in $services) {
Start-Job -ScriptBlock $stopService -ArgumentList $service
}

Receive-Job $jobs -Wait -AutoRemoveJob

还有其他选项,例如 this answer 中显示的选项。 , 使用循环和 WaitHandle.WaitAny Method

This answer展示了一个类似的、更成熟的替代方案,它使用一个函数来等待具有进度的作业和一个可选的 TimeOut 参数。

关于powershell - 在 Powershell 中,如何等待并行作业完成后再继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71366320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com