ForEach-Object は繰り返し処理をおこなうためのコマンドレットです。単体で使われずに基本的に | (パイプライン) や自動変数 $_ などと合わせて使われます。実際にコマンドを実行して動きを確認しましょう。
1. 前提知識
ForEach-Object を使う前に、まずは繰り返し処理の前提知識を理解してください。Powershellを起動し「1,2,3」と入力してみてください。そうすると下記のような結果になります。
PS> 1,2,3
1
2
3
次に「1,2,4」と入力してみましょう。入力した数値の個数ではなく、入力した数値がそのまま出力されていることがわかります。
PS> 1,2,4
1
2
4
今度は「1..5」と入力してみましょう。1から5までの数字が順番に出力されることがわかります。
PS> 1..5
1
2
3
4
5
2. ForEach-Object の動きを理解する
それでは ForEach-Object を使ってみましょう。 ForEach-Object{hostname} を実行してみてください。次のようにホスト名が1回出力されるはずです。
PS> ForEach-Object{hostname}
WIN2022
ForEach-Object は {} の中のコマンドを実行するコマンドレットです。
次に 1..5 | ForEach-Object{hostname} を実行してみてください。するとホスト名が5回出力されます。
PS> 1..5 | ForEach-Object{hostname}
WIN2022
WIN2022
WIN2022
WIN2022
WIN2022
1..5 の部分で数値が生成され、生成された数値が | (パイプライン) によって ForEach-Object に渡されています。数値が渡される度に ForEach-Object が実行され、結果として5回 ForEach-Object が実行されています。
さらに理解を深めるために引き渡された数値を自動変数 $_ を使って表示してみましょう。
1..5 | ForEach-Object{$_} を実行してみてください。いかがでしょう?
> 1..5 | ForEach-Object{$_}
1
2
3
4
5
1..5 の部分で数値が生成され、生成された値が | によって ForEach-Object に引き渡されます。このときに受けとた値は自動変数 $_ に格納されます。
3. ForEach-Object のエイリアス「%」
ForEach-Object には % というエイリアスが存在します。置き換えても同じ結果になります。やってみましょう。
> 1..5 | %{$_}
1
2
3
4
5
読みづらいプログラムになるので % を使わないことをお勧めしますが、頭の片隅に入れておくと他人のプログラムを読むときに役立ちます。
以上。
PowerShell に関しては下記の本をお勧めしておきます。プログラミング初心者向けに丁寧に解説されています。2015年に出版された本ですが、PowerShell の基本的なコマンドはかわらないので何の問題もありません。
コメント