我试图更好地了解 powershell 如何处理作业。
这两篇文章都有很大帮助:
但是,使用以下示例脚本,我在调用 Receive-Job 时得到了意想不到的结果。我希望每一行都有一个结果,但有时我会看到每行有多个结果或额外的空白回车。关于如何只写出每个作业从控制台流入的信息的任何想法?
$loops = 1..10
$jobs = new-object System.Collections.ArrayList
$loops | % {
$jobs.add(
(start-job -ScriptBlock {
param($list)
$list | % {
sleep -seconds (get-random -Maximum 3 -Minimum 1)
write-host "Number is: $_"
}
} -ArgumentList (,$loops))
) | out-null
}
while ($jobs.count -gt 0)
{
if ($jobs -ne $null)
{
$list = $jobs | ? { $_.HasMoreData -eq $true }
$list | % { Receive-Job -Job $_ }
$list2 = $jobs.Clone() | ? { $_.State -eq "Completed" }
$list2 | % {
$jobs.Remove($_) | out-null
}
$list = $null
}
}
输出可以...
数量是:1 数量是:1 数量是:2
或者有时...
数量是:1 数量是:2 号码是:1号码是:2 号码是:1号码是:2号码是:2