MiracleJobLogo
エンジニアのエンジニアによるエンジニアのためのサイト
News 07/19 おすすめ情報に 『 【資格取得者速報】 Aさん 「 Microsoft Security, Compliance, and Identity Fundamentals」 』 を追加しました。
会員登録するとキャリア診断やサイトに参加することができます。
あなたにおすすめな技術情報、資格、仕事などをお知らせします。

無料会員登録


パスワードを忘れた場合
LINEで送る
MiracleJobBanaLeft1
MiracleJobBanaLeft2


【PowerShell】PowerShell 7のForEach-Object -Parallelを試してみる
profile-img
投稿者: muto-sanさん
投稿日:2019/10/28 16:07
更新日:2019/10/28 16:52
like-img
分類
技術
テクノロジー
Windows系サーバ
キャリア
運用・保守 / テクニカルサポート / 構築
投稿内容
PowerShell 7 Preview 3で追加された新機能、ForEach-ObjectのParallelオプションを試してみます。
(PowerShell 7の現在の最新版はPreview 5です)

ForEach-Objectは、パイプで渡された配列に対してスクリプトブロックの内容を順次実行するオブジェクト操作コマンドで、多数のユーザーに同一の設定を入れる時などPowerShellでは頻出コマンドの一つです。

ただしこのコマンドはパイプで渡されたオブジェクトに対して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/

コメント


MiracleJobBanaRight1
MiracleJobBanaRight2
MiracleJobBanaRight3