运维开发网

多线程 – Powershell Throttle通过作业完成多线程作业

运维开发网 https://www.qedev.com 2020-04-09 18:09 出处:网络 作者:运维开发网整理
我发现的所有内容都使用预定义的睡眠时间来限制工作. 我需要油门等到工作完成后再开始新工作. 一次只能运行4个作业. 因此脚本将运行4并且当前暂停10秒然后运行其余部分. 我想要的是脚本只允许一次运行4个作业,并且当作业完成时,新的作业将被启动. 通过服务器名称列表初始化作业. 是否可以存档? $servers = Get-Content "C:\temp\flashfilestore\server
我发现的所有内容都使用预定义的睡眠时间来限制工作.

我需要油门等到工作完成后再开始新工作.

一次只能运行4个作业.

因此脚本将运行4并且当前暂停10秒然后运行其余部分.

我想要的是脚本只允许一次运行4个作业,并且当作业完成时,新的作业将被启动.

通过服务器名称列表初始化作业.

是否可以存档?

$servers = Get-Content "C:\temp\flashfilestore\serverlist.txt"

$scriptBlock = { #DO STUFF }


$MaxThreads = 4

foreach($server in $servers) {
     Start-Job -ScriptBlock $scriptBlock -argumentlist  $server 
     While($(Get-Job -State 'Running').Count -ge $MaxThreads) {
          sleep 10 #Need this to wait until a job is complete and kick off a new one.
     }
}
Get-Job | Wait-Job | Receive-Job
您可以测试以下内容:

$servers = Get-Content "C:\temp\flashfilestore\serverlist.txt"
$scriptBlock = { #DO STUFF }
invoke-command -computerName $servers -scriptblock $scriptBlock -jobname 'YourJobSpecificName' -throttlelimit 4 -AsJob

此命令使用Invoke-Command cmdlet及其AsJob参数来启动在多台计算机上运行scriptblock的后台作业.由于该命令不能同时运行4次以上,因此该命令使用Invoke-Command的ThrottleLimit参数将并发命令数限制为4.

请注意该文件包含域中的计算机名称.

0

精彩评论

暂无评论...
验证码 换一张
取 消