PowerShellのループ処理方法まとめ!For/While/Do-WhileやForEach/ForEach-Objectも!

powershell

PowerShellでループ(繰り返し)処理をしたいときはないでしょうか。

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

・PowerShellでループ処理をしたいが方法がよくわからない
・PowerShellでどのループ処理使ったらよいかよくわからない

ですよね。

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

・PowerShellでFor/While/Do-WhileやForEach/ForEach-Objectを使いループ(繰り返し)処理をする方法

についてまとめます!

PowerShellでループ処理をする方法

PowerShellでループ処理をする方法について説明をします。

PowerShellでは、ループ処理を行う方法として以下の3つが用意されています。

For: コードのブロックを特定の回数実行する場合は、このループを使用します。
ForEach: アイテムのコレクション (配列やリストなど) を繰り返し処理し、同時にアイテムを取得します。
While: 特定の条件が真である限り繰り返し処理を続けます。

それぞれ特性がありますので、具体的にどのようにして繰り返し処理を行うか確認してみましょう。

{説明}

PowerShellのForステートメントでループ処理をする

PowerShellのForステートメントでループ処理をする方法について説明をします。

構文

構文は以下の通りです。

for (初期値設定式; ループ条件式; ループ更新式){
処理
}

For文は初期値設定式で初期値を設定し、ループ条件式が真(true)の間、繰り返し処理をおこなっていきます。

初期値設定式: ここで、ループ変数の初期値を設定します。これは、ループの開始時に 1 回だけ実行されます。

ループ条件式: これは、ループの各反復の前に評価されるブール式です。条件が の場合$true、ループは実行を続けます。条件がFalse の場合、ループは終了します。

ループ更新式: これは、ループの各繰り返しの後に実行されるステートメントです。通常、ループ変数を更新するために使用されます。

サンプルコマンド

サンプルコマンドは以下の通りです。

for ($i = 1; $i -le 10; $i++) {
  Write-Output $i
}

1 から 10 までカウントし、結果を出力していきます。
初期値設定式で変数$iの初期値を 1 に設定します。
ループ条件式で$i > 10の条件を指定します。この場合ループは変数$iが 10 以下である限り継続します。
ループ更新式でループごとに$iの値を1 ずつ増やします。

結果です。

1
2
3
4
5
6
7
8
9
10

PowerShellのWhileステートメントでループ処理をする

PowerShellのWhileステートメントでループ処理をする方法について説明をします。

構文

構文は以下の通りです。

while (ループ条件式){
処理
}

Whileステートメントはループ条件式が真(true)の間、繰り返し処理をおこなっていきます。

ループ条件式: これは、ループの各反復の前に評価されるブール式です。条件が の場合$true、ループは実行を続けます。条件がFalse の場合、ループは終了します。

タカヒロ
タカヒロ
While文はループの本体に条件を更新するステートメントを含めることが大事です。設定しない場合ループが無限ループになる場合があるためです。

サンプルコマンド

サンプルコマンドは以下の通りです。

$i = 1
while($i -le 10) {
  Write-Output $i
  $i++
}

1 から 10 までカウントし、結果を出力していきます。
変数$iを 1 に設定します。
ループ条件式で$i > 10の条件を指定します。この場合ループは変数$iが 10 以下である限り継続します。
変数の値を出力した後、$iの値を1 ずつ増やします。

結果です。

1
2
3
4
5
6
7
8
9
10

PowerShellのDo-Whileステートメントでループ処理をする

PowerShellのDo-Whileステートメントでループ処理をする方法について説明をします。

構文

構文は以下の通りです。

do {ステートメント リスト} while (ループ条件式)

Do-Whileステートメントはループ条件式が真(true)の間、Do側で繰り返し処理をおこなっていきます。

ステートメント リスト:ループが入力または繰り返されるたびに実行される 1 つ以上のステートメントを指定します。
含ループ条件式: これは、ループの各反復の前に評価されるブール式です。条件が の場合$true、ループは実行を続けます。条件がFalse の場合、ループは終了します。

タカヒロ
タカヒロ
While文はループの本体に条件を更新するステートメントを含めることが大事です。設定しない場合ループが無限ループになる場合があるためです。

サンプルコマンド

サンプルコマンドは以下の通りです。

$i = 1
do {
  Write-Output $i
  $i++
}
while($i -le 10)

1 から 10 までカウントし、結果を出力していきます。
変数$iを 1 に設定します。
Doの部分で変数の値を出力した後、$iの値を1 ずつ増やします。
ループ条件式で$i > 10の条件を指定します。この場合ループは変数$iが 10 以下である限り継続します。

結果です。

1
2
3
4
5
6
7
8
9
10

タカヒロ
タカヒロ
Whileステートメントの処理の部分がDoに移った形になります。

PowerShellのForEachステートメントでループ処理をする

PowerShellのForEachステートメントでループ処理をする方法について説明をします。

構文

構文は以下の通りです。

foreach (アイテム in コレクション) {
処理
}

ForEachステートメントはコレクションのアイテムが存在する間、繰り返し処理をおこなっていきます。

アイテム: コレクション内のアイテム変数です。任意の名前を付けることができますが、通常は$itemまたは$_.となります。

コレクション: ループ処理させたいアイテムリストです。リストは配列やオブジェクトなどいろいろなタイプのオブジェクトをコレクションにすることができます。

タカヒロ
タカヒロ
While文はループの本体に条件を更新するステートメントを含めることが大事です。設定しない場合ループが無限ループになる場合があるためです。

サンプルコマンド

サンプルコマンドは以下の通りです。

$colors = "青", "赤", "黄色"
foreach ($color in $colors) {
  Write-Output $color
}

配列に”青”, “赤”, “黄色”を設定し、配列の要素を取得し、その要素の値を出力していきます。

結果です。



黄色

PowerShellのForEach-Objectステートメントでループ処理をする

PowerShellのForEach-Objectステートメントでループ処理をする方法について説明をします。

ForEach-Objectステートメントはオブジェクトのコレクションをループ処理し、各オブジェクトに対してアクションを実行できるようにするコマンドレットです。

構文

構文は以下の通りです。

Get-Command | ForEach-Object {
処理
}

PowerShellのForEach-ObjectステートメントはForEachに似ていますが、配列やリストだけでなく、あらゆるタイプのオブジェクトを操作できます。

サンプルコマンド

サンプルコマンドは以下の通りです。

Get-Process | ForEach-Object -Process {
  if ($_.Id -gt 20000) {
    Write-Output "$($_.ProcessName) ($($_.Id))"
  }
}

使用可能なすべてのコマンドのリストを取得し、各コマンドのコード ブロックを実行します。パラメーターを使用して、コレクション内の各オブジェクトに対してProcessブロックを指定しています。プロセス ID が20000 より大きいプロセスのみを出力しています。

結果です。

EXCEL (20924)
EXCEL (21660)
EXCEL (21988)
EXCEL (23836)
EXCEL (24304)
EXCEL (24432)
EXCEL (25428)
EXCEL (25520)
EXCEL (25972)
EXCEL (26192)
EXCEL (26604)
EXCEL (26780)
・・・

さいごに

いかがでしょうか。

今回は、

・PowerShellでFor/While/Do-WhileやForEach/ForEach-Objectを使いループ(繰り返し)処理をする方法

についてまとめました。

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



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

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








コメントを残す

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

CAPTCHA ImageChange Image