当启动过多作业时,Invoke-Command -AsJob 将永久启动“运行”作业

当启动过多作业时,Invoke-Command -AsJob 将永久启动“运行”作业

我猜测在某个地方设置了一个限制,或者当并发作业数量达到一定(某种程度上可变)时就会出现一个限制。

我想要做的是使用循环和 Invoke-Command 几乎同时在许多服务器上运行一个小脚本。服务器列表是 Get-ADComputer 结果的数组。循环如下所示:

$aComputerList | ForEach-Object {
    Invoke-Command -AsJob -ComputerName $_.DnsName {
        Write-Host "foo"
    }
}

这将创建与 $aComputerList 中的计算机帐户数量一样多的正在运行的作业。但这些作业将永远保持“运行”状态。(某些作业会因各种可解释的原因而失败。)

对计算机帐户的子集运行相同的脚本(如 $aComputerList[0..40])即可。作业将启动,运行很短的时间(在此示例中),然后按预期终止,并传递结果(“foo”)。

截止点似乎在 45 左右,因为 $aComputerList[0..40] 始终有效,[0..45] 通常有效,而 [0..50] 有时有效。[0..60] 从不有效。

知道我遇到了什么限制吗?似乎不是 CPU 或内存。

答案1

可能有两种情况 - 您要么达到了 shell 的标准内存限制,要么无法处理为作业创建的运行空间数量。无论哪种情况,这都是 开关存在的-ThrottleLimit原因Invoke-Command -AsJob

相关内容