実装(Start-job,Wait-job,Remove-Jobを使う)
# 第一引数に実行するスクリプトブロック、第二引数に処理の上限数を受け取る関数「counting-semaphore」
# 第二引数がない場合は処理上限数は10となる
function counting-semaphore ([scriptblock]${scriptbl},${number}=10) {
# カウント用変数のインクリメント
$script:counting++
# カウント用変数が上限数に達した場合、処理終了を待つ
switch ($script:counting) {
{$_ % ${number} -ne 0} {start-job $scriptbl -name "name$script:counting"}
{$_ % ${number} -eq 0} {start-job $scriptbl -name "name$script:counting"
for ($i=1;$i -le ${number};$i++) {
wait-job -name "name$i"
remove-job -name "name$i"
}
$script:counting = 0
}
}
}
実行例
for ($i=1;$i -le 2;$i++) {
counting-semaphore {echo $using:i} 1
}
汎用化するなら重複しない名前を発行する仕組みが必要