0

SSIS パッケージを呼び出す文字列配列に複数のコマンドがあります。ハードウェアを活用するために、一度に多くのパッケージを実行し、1 つのパッケージが完了するまで待ってから別のパッケージを追加したいと考えています。SOに関する他の同様の質問を見ると、次のようなものがうまくいくと思います:

cls
$commands = @()
$commands += "notepad.exe"
$commands += "notepad.exe"
$commands += "notepad.exe"
$commands += "notepad.exe"
$commands += "notepad.exe"
$commands += "notepad.exe"

foreach ($instance in $commands)
{
    $running = @(Get-Job | Where-Object { $_.JobStateInfo.State -eq 'Running' })
    if ($running.Count -le 2) 
    {
        Start-Process $instance    
    } 
    else 
    {
         $running | Wait-Job
    }

    Get-Job | Receive-Job
}

これにより、6 つのメモ帳を開くことができますが、あるしきい値 (この例では 2) まで待機しません。理想的には、メモ帳の 1 つを閉じるまで待機する必要があります (つまり、プロセスが終了します)。

誰もこれを以前にやったでしょうか?

4

1 に答える 1

0

あなたは近づいていますが、Start-Job でプロセスを開始していないため、Get-Job と Wait-Job は何の役にも立ちません。これは機能しますか?

$commands = @()
$commands += "notepad.exe"
$commands += "notepad.exe"
$commands += "notepad.exe"
$commands += "notepad.exe"

foreach ($instance in $commands)
{
    While ( (Get-Job -State Running).Count -ge 2 )
    { Start-Sleep -s 5 } 

    Start-Job -ScriptBlock {Start-Process -FilePath $args[0]} -ArgumentList $instance
}
于 2013-05-10T19:30:57.537 に答える