ただしこのコマンドはパイプで渡されたオブジェクトに対して1行ずつ直列で処理をするため処理の件数と内容によってはすごく時間がかかる場合がありました。
そこで並列処理(非同期処理)の登場です。
今までも同様に非同期処理を行う方法もあったのですが、とてもワンライナーで記述できるようなものではなくとても複雑でした。
私としても期待の新機能の1つであるこのコマンドを実際に使ってみます。
まずは普通にForEach-Objectを実行した場合。
0~10の数字の配列を渡し、1秒毎に時刻と数字を表示しています。
1秒で1つ処理されていることがわかると思います。
※ 「%」は「ForEach-Object」のエイリアス
次に、Parallelオプションを追加して実行してみます。
1秒に5件ずつ処理されていることがわかります。
Parallelオプションは既定で5件ずつ並列実行をするようです。
ThrottlingLimitオプションを追加して、一度に処理する件数を調整してやります。
ThrottlingLimitに3を設定してやることで、3件ずつ処理されていることがわかります。
PowerShellでのスクリプティングをしていると「並列で実行出来たらいいのに!」と思う場面が度々ありますが、これが標準で使えるようになれば効率化に期待が持てます。
下記MS開発者ブログにも詳細が記載されていますので参照ください。
PowerShell ForEach-Object Parallel Feature
https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/