PowerShellのforeachで繰り返し処理をしたいときはないでしょうか。
けど、そんな中で悩むことは、
・PowerShellのforeachとForEach-Object の違いがよくわからない
ですよね。
今回はそんなお悩みを解決する
・PowerShellのforeachとForEach-Object の違い
についてまとめます!
もくじ
PowerShellの繰り返し処理の方法は2種類
PowerShell における繰り返し処理の方法は2種類あります。
一つ目はforeachステートメント、二つ目はForEach-Objectコマンドレットとなります。
foreachステートメントとForEach-Objectコマンドレットの違い
foreachステートメントとForEach-Objectコマンドレットの違いについて説明をします。
大きく違うのはコマンドレットとステートメントの違いという点になります。
コマンドレットはオブジェクト内をループしながら一つづつ処理することに対して、ステートメントはメモリにため込んで一気に処理します。後者は前者よりスピードが速いですが、メモリを消費しやすいディメリットがあり、大量の処理には不向きとなります。
PowerShellのforeachステートメントの使い方
PowerShellのforeachステートメントの使い方について説明をします。
構文
構文は以下の通りです。
foreach ($item in $collection)
{
#アイテムの処理を記載
}
$collectionに複数のアイテムが存在するオブジェクトを指定します。
コレクションから取得したアイテムがinを介して$itemへ渡されます。
サンプル:配列の値を出力
配列の値を出力するサンプルコマンドとなります。
$colors = @('青', '赤', '黄色')
foreach ($color in $colors)
{
Write-Output "色は?: $color"
}
結果です。
色は?:
青
色は?:
赤
色は?:
黄色
ハッシュテーブルやオブジェクトなどの他のタイプのコレクションでステートメントを使用することもできます。
$object = [pscustomobject]@{
プロパティ1 = 'value1';
プロパティ2 = 'value2';
プロパティ3 = 'value3'
}
foreach ($property in $object.psobject.Properties) {
Write-Output " $($property.Name) の値は $($property.Value)"
}
結果です。
プロパティ1
の値は
value1
プロパティ2
の値は
value2
プロパティ3
の値は
value3
PowerShellのForEach-Objectコマンドレットの使い方
PowerShellのForEach-Objectコマンドレットの使い方について説明をします。
構文
構文は以下の通りです。
foreach ($item in $collection)
$collection | ForEach-Object { #アイテムの処理を記載 $_ }
$collectionに複数のアイテムが存在するオブジェクトを指定します。
コレクションから取得したアイテムが$_へ渡されます。
サンプル:配列の値を出力
配列の値を出力するサンプルコマンドとなります。
$colors = @('青', '赤', '黄色')
$colors | ForEach-Object { Write-Output "色は?: $_" }
結果です。
色は?:
青
色は?:
赤
色は?:
黄色
変数$_は、処理中のコレクション内の現在のアイテムを表します。この変数を使用して、コレクション内の各アイテムに対してアクションを指定し、実行できます。
出力結果をコレクションに代入する
ForEach-Objectコマンドレットを使用して、コレクション内の各項目に対してアクションを実行し、コマンドレットを使用して結果を新しいコレクションに代入することもできます。
サンプルコマンドとなります。
$colors = @('青', '赤', '黄色')
$lengths = $colors | ForEach-Object {
[pscustomobject]@{
文字数 = $_.Length
色 = $_
}
}
$lengths | Select-Object 文字数, 色
結果です。
文字数 色
------ --
1 青
1 赤
2 黄色
$lengthsへForEach-Objectコマンドレットの結果すべてを代入し、Select-Objectコマンドレットで、コレクション$lengthsの内容を出力しています。
ExcelからPowerShellを実行し結果をExcelにまとめる
通常PowerShellはコマンドウインドウやPSファイルにして実行するケースが多いですが、
ExcelからPowerShellコマンドを実行してその結果をそのExcelへ返してセルへ表示させることもできます。
もしPowerShellの実行結果を別ファイルにまとめたい場合は、実行環境と出力結果をひとつのExcelでまとめてできるのでとても便利です。
詳細は以下にまとめていますので、よろしければ利用してみてください。
さいごに
いかがでしょうか。
今回は、
・PowerShellのforeachとForEach-Object の違い
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す