gpt4 book ai didi

Powershell Start-Jobs 节流

转载 作者:行者123 更新时间:2023-12-02 22:37:32 28 4
gpt4 key购买 nike

我在限制作业和“挂起”或“失败”的作业方面遇到了麻烦。这基本上就是我正在尝试做的事情。

$allServers = Import-Csv "C:\temp\input.csv"
$job = $allServers | % {
while (@(Get-Job -State Running).Count -ge 6) {
Start-Sleep -Seconds 2
}
Start-Job -Name $_.computerName -ScriptBlock {
param ($cpn,$dom)
(DO QUERIES HERE)
(OUTPUT TO OBJECT HERE)
} -ArgumentList $_.computerName,$_.Domain
}
$jobsdone = $job | Wait-Job | Receive-Job

我想运行 5 个并发作业,很简单。

问题是当我查询没有响应的服务器时,作业挂起并且脚本永远不会结束。我试过添加...

Wait-Job -Name $_.computerName -Timeout 20

...在最后一个大括号之上,但所做的只是有效地将并发限制为一个线程,直到 20 秒过去,然后放弃挂起的作业去做其他作业。在那种情况下,整个脚本仍然没有完成。

此代码在没有节流和作业等待的情况下工作正常,只要我没有得到无响应的服务器。

最佳答案

在您的 while 循环中检查作业运行的时间长度。如果这大于您确定的某个超时,则停止该作业,例如:

while (@(Get-Job -State Running).Count -ge 6) {
$now = Get-Date
foreach ($job in @(Get-Job -State Running)) {
if ($now - (Get-Job -Id $job.id).PSBeginTime -gt [TimeSpan]::FromMinutes(2)) {
Stop-Job $job
}
}
Start-Sleep -sec 2
}

您可能想看看这个 PowerShell team blog post关于如何使用队列限制作业。

关于Powershell Start-Jobs 节流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552058/

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