PowerShellのforeachで繰り返し処理をする方法!

powershell

PowerShellのforeachで繰り返し処理をしたいときはないでしょうか。

けど、そんな中で悩むことは、

・PowerShellのforeachで繰り返し処理をしたいが方法がよくわからない
・PowerShellのforeachとForEach-Object の違いがよくわからない

ですよね。

今回はそんなお悩みを解決する

・PowerShellのforeachで繰り返し処理をする方法
・PowerShellのforeachとForEach-Object の違い

についてまとめます!

PowerShellの繰り返し処理の方法は2種類

PowerShell における繰り返し処理の方法は2種類あります。

一つ目はforeachステートメント、二つ目はForEach-Objectコマンドレットとなります。

foreachステートメントとForEach-Objectコマンドレットの違い

foreachステートメントとForEach-Objectコマンドレットの違いについて説明をします。

大きく違うのはコマンドレットとステートメントの違いという点になります。

コマンドレットはオブジェクト内をループしながら一つづつ処理することに対して、ステートメントはメモリにため込んで一気に処理します。後者は前者よりスピードが速いですが、メモリを消費しやすいディメリットがあり、大量の処理には不向きとなります。

タカヒロ
タカヒロ
Powershellの実行環境のリソースやスペック、処理データのサイズによって使い分けるよとよいでしょう。

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でまとめてできるのでとても便利です。

詳細は以下にまとめていますので、よろしければ利用してみてください。

Excel VBAでPowerShellを実行する方法2選!処理結果取得も!

タカヒロ
タカヒロ
だいたい5~10分ぐらいで追加インストールなしで用意することができます。

さいごに

いかがでしょうか。

今回は、

・PowerShellのforeachで繰り返し処理をする方法
・PowerShellのforeachとForEach-Object の違い

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です