3

リスト内の各サーバーに対してジョブを実行します。一度に実行できるジョブは 5 つだけです。ジョブが完了すると、リストの次のサーバーで新しいジョブが開始されます。これが私がこれまでに持っているものですが、最初の5つのジョブが実行された後、新しいジョブを開始することはできません:

   $MaxJobs = 5
   $list = Get-Content ".\list.csv"
   $Queue = New-Object System.Collections.Queue
   $CurrentJobQueue = Get-Job -State Running
   $JobQueueCount = $CurrentJobQueue.count

   ForEach($Item in $list)
  {
  Write-Host "Adding $Item to queue"
  $Queue.Enqueue($Item)
  }

 Function Global:Remote-Install
 {
 $Server = $queue.Dequeue()
 $j = Start-Job -Name $Server -ScriptBlock{

        If($JobQueueCount -gt 0)
        {
        Test-Connection $Server -Count 15
        }##EndIf
    }##EndScriptBlock

  }

For($i = 0 ;$i -lt $MaxJobs; $i++) 
{
Remote-Install
}
4

2 に答える 2

4

Invoke-Commandたとえば、次を使用すると、PowerShellがこれを行います。

Invoke-Command -ComputerName $serverArray -ScriptBlock { .. script here ..} -ThrottleLimit 5 -AsJob

ところで、Start-Job が別の PowerShell プロセスを起動してジョブを実行するため、.NET Queue の使用が機能するとは思いません。

于 2013-01-05T17:57:10.380 に答える