0

我在调用 SSIS 包的字符串数组中有多个命令。为了利用硬件,我想一次运行多个包,等到一个包完成后再添加另一个包。通过查看关于 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。理想情况下,它应该等到我关闭其中一个记事本(即过程完成)。

以前有人会这样做吗?

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 回答