私は、powershell がジョブを処理する方法をよりよく理解しようとしています。
これらの記事の投稿はどちらも大いに役立ちました。
ただし、次のサンプル スクリプトでは、Receive-Job の呼び出し中に予期しない結果が得られます。各行に結果が表示されることを期待していますが、1 行に複数の結果が表示されたり、余分な空白のキャリッジ リターンが表示されることがあります。各ジョブのコンソールからストリーミングされる情報だけを書き出す方法について何か考えはありますか?
$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