PowerShell

【PowerShell】繰り返し文(While, For)について

2018年6月9日

こんにちは!SE ブログの相馬です。

 

 

 

今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことができます。

 

 

これは、ループ処理とも呼ばれています。ループ処理は、「ある条件を満たすまで、処理を繰り返し実行する」になります。

 

 

ループ処理ができるようになると、同じ処理を繰り返し書かずに済みますので、面倒な処理が楽になり、コードの量も減り簡単になります。

 

 

では早速ですが、繰り返し処理の例を見てみましょう。

 

 

 

while 文の処理

 

 

While 文の処理について、サンプルと処理の順番を作りました。図でも説明していますので合わせて見てもらえればと思います。

 

  1. 変数 $i に 1 を代入する。
  2. 条件式の結果が True( $i の値が 5 以下)であれば、以下の処理が実行される。
    • Write-Output の処理をしてコンソールに出力する。
    • 1 ずつ足す。
  3. while の処理に戻る。
  4. $i の値が 6 になったら 条件式の結果が False になり処理が終了する。

 

 

 

 

以下の図でも処理の説明をしています。

 

 

 

このように while 文は、条件式の後に繰り返しの処理内容で実行されます。

 

この場合は、条件式が True の場合に処理が実行されて、最後に False になります。

 

 

ただし、最初に False になった場合は、処理が実行されません。例えば$i の値が最初から 100 だとしたらどうなるでしょうか。

 

 

 

 

条件式の結果は、True ではなく False になります。False の処理が実行されて処理は終了します。

 

 

この条件式についてですが、気を付けなければならない点があります。

 

 

条件式の処理が正しくないと、無限ループが発生して処理が永遠と続いてしまいます。皆さんは実施する必要は無いのですが、実際以下の処理を実行すると無限ループになります。

 

 

 

 

以下の図でも処理の説明をしています。

 

 

 

無限ループが始まると、場合によっては PC やシステムが停止する恐れがありますので、気を付けてください。(上の処理程度であれば、実行してすぐ処理を止めるくらいであれば全然大丈夫だと思います。)

 

 

 

do-while 文の処理

 

 

それでは while と同じような条件式で do-while 文というのがありますので一緒に覚えてしまいましょう。

 

 

処理の流れは以下のとおりです。

 

 

  1. 変数 $i に 10 を代入する。
  2. do に入り、以下の処理が実行される。
    • Write-Output の処理をしてコンソールに出力する。
    • $i から 1 を引く。
  3. while で $i に入っている値が 0 以上であれば、 do にループする。
  4. 処理を実行し、最終的に $i の値が -1 になったら、while の条件式が False になり、処理が終了する。

 

 

 

 

以下の図でも処理の説明をしています。

 

 

 

このように do-while 文は、処理を実行してから条件式で True か False を判定ます。

 

 

 

For 文の処理

 

 

For 文の処理について、サンプルと処理の順番を作りました。図でも説明していますので合わせて見てもらえればと思います。

 

  1. 変数 $i に 0 を代入する。これを変数の初期化と言います。
  2. 条件式の結果が True( $i の値が 10 以下)であれば、以下の処理が実行される。
  3. i++ で $i に 1 を足す。
  4. For の処理に戻る。
  5. $i の値が 11 になったら 条件式の結果が False になり処理が終了する。

 

 

 

 

以下の図でも処理の説明をしています。

 

 

 

このように For 文は、条件式の後に繰り返しの処理内容で実行されます。

 

この場合は、条件式が True の場合に処理が実行されて、最後に False になります。

 

 

ただし、最初に False になった場合は、処理が実行されません。例えば$i の値が最初から 11 だとしたらどうなるでしょうか。

 

 

 

 

このように条件式の結果は、True ではなく False になります。False の処理が実行されて処理は終了します。

 

 

それではここで For 文の基本を理解していただけたかと思うので、基本をベースに処理を多くしてみましょう。

 

 

今度は、以下のように Player を 1 ~ 5 まで作り、$arg に配列として格納します。

 

 

For 文を使い、配列の数以下であれば、Write-Output でコンソールに表示した後に $i に 1 を足します。

 

  1. $arg に Player1 ~ Player5 を代入する。
  2. 変数 $i に 0 を代入する。
  3. $i の値が $arg.Count なので配列の中の数以下の場合は処理が実行される。
    • 処理内容は $arg の配列のインデックスを指定してコンソールに表示する。
  4. i++ で $i に 1 を足す。
  5. For の処理に戻る。
  6. $i の値が 11 になったら 条件式の結果が False になり処理が終了する。

 

 

 

 

以下の図でも処理の説明をしています。

 

 

 

 

使い分け

 

 

For 文と While 文が出てきましたが、使い分けについて知りたいですよね。

使い分けとしては、以下のようにになります。

 

  • ループ処理の回数が決まっている場合は For文
  • ループ処理の回数が明確に決まっていない場合は While 文

 

 

 

まとめ

 

 

以上になります。いかがでしょうか。

 

 

最初は分かりにくいとは思います。条件式はひとつずつ目で追っていき、実際手を動かしてコードを何度も書けば、必ず覚えられるようになります。

 

 

では最後までお読みいただきありがとうございました!

 

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-PowerShell
-