PowerShellは、自動化やWindowsベースのシステムの管理に多くの機能を提供する強力なスクリプト言語です。最も一般的に使用される構文の1つは、PowerShellのwhile
ループです。
PowerShellスクリプトの学習中に無限ループに陥ってしまった場合でも心配はいりません。PowerShellのwhile
ループがあなたを素晴らしい脱出へ導きます。そして、このチュートリアルでは、スクリプトを書きながらPowerShellでのwhile
ループの基本に戻ります。
次のレベルのPowerShellスクリプト作成スキルを身につけるために、読み続けてください!
前提条件
このチュートリアルは実演形式です。一緒に進めるためには、以下のものを用意してください:
- A Windows machine – This tutorial uses Windows 10.
- Windows PowerShell 5.0以上がインストールされていること – このチュートリアルではPowerShell 7を使用します。
- A user account with administrator privileges.
単一条件のwhile
ループの実行
while
ループの中でも、最も簡単なタイプの1つは単一条件タイプです。このタイプのループは、指定された条件がtrueに評価される限り、一連の指定されたコマンドを実行します。’False’が返されると、ループが終了し、スクリプトの残りの部分が実行されます。
以下は、単一の条件 while
ループの構文です:
- 最初に気づくことは、括弧の使用です。条件は括弧で囲まれ、コードブロックは条件が true の間に実行される PowerShell コマンドのセットです。
- 注意すべき2つ目の点は、条件がブール値を返す必要があり、その値は True または False に評価されることです。
以下のコードを実行します。ここでは、$val
の値は 0
から始まり、コードブロックが実行されるたびに 1
ずつ増加し、$val
変数の値が 3
になるまで続きます。
$val
が 3
になると、条件が False になり、ループが中断され、スクリプトの残りの部分が実行されます。

前述の例では、while
ループで条件を使用することができます。ただし、PowerShellの組み込み変数($true
および$false
など)も使用してWhile
ループを作成できます。
以下の構文は、$true
がもはや$true
でなくなるまで実行されます。言い換えれば、このループは永遠に実行されます。ただし、無限ループから抜ける方法を常に含める必要があります。そうしないと、永遠にスタックします。このチュートリアルの後でbreak
とcontinue
を使用してループから抜ける方法について詳しく学びます。
以下のコード ブロックを実行します。これは永遠に実行され、$i
の値をコンソールに表示します。
今、ループから抜けるにはCtrl+Cを押します。このループは多くのシステムリソースを消費するため、注意して使用してください。

while
loop with PowerShell’s built-in ($true
) variable複数条件を持つWhile
ループを実行する
さらに、単一条件のwhile
ループに加えて、複数条件のwhileループも作成できます。単一条件のWhile
ループと同様に、条件は真(True)または偽(False)のいずれかを返さなければなりません。
以下は、複数条件のwhile
ループの構文であり、単一条件のwhile
ループの構文と類似しています。主な違いは、以下の演算子で区切られた複数の条件を含めることができる点です:
- AND (
-and
) – 両方の条件が真である必要があります。 - OR (
-or
)(どちらかの条件が真であることができます)。
以下のコードを実行し、$val
が3
でない(-ne
)かつ$i
が5
でない(-ne
)間ループします。
両方の変数の値がそれぞれの条件に達すると、ループが終了し、スクリプトの残りの部分が実行されます。

AND 演算子を使用した while
ループの実行

while
loop with AND operator以下のコードを実行して、ユーザーに年齢を尋ねます。その値は $age
変数に格納されます。
ユーザーが数値を入力し、それが 1
未満であるか、数値ではない場合 (-nomatch
)、ユーザーに再度有効な数値を入力するように促します。この動作は、ユーザーが有効な入力を複数回入力する機会を与えるのに役立ちます。
以下の出力では、ユーザーに年齢を入力するように三度促されたことがわかります。
- 最初の入力では、ユーザーは数字ではないtenを入力しました。
- 2回目の入力では、ユーザーは1未満の0を入力しました。
- 3回目の入力では、ユーザーは有効な年齢である10を入力しました。

while
loop with the OR operatorWhileループでBREAKおよびCONTINUEキーワードを使用する
PowerShellスクリプトに柔軟性を追加する方法を見てきました。ただし、Whileループの実行をより制御するために、BREAKキーワードとCONTINUEキーワードを追加します。
たとえば、配列内の特定の数のアイテムのみを処理したい場合、BREAKキーワードを使用して、処理するアイテムの数が達成されたときにループを終了することができます。
これらのキーワードの機能は次のとおりです。
Keyword | Function |
---|---|
break | Immediately exits the loop and continues execution with the rest of the script. |
continue | Skips over the remaining code block in the current iteration of the loop and continues with the next iteration. |
以下のコードを実行すると、10個のアイテムの配列をループ処理します。
以下のコードでは、$i
の値をチェックするif
ステートメントがあります。もし$i
の値が5
であれば、continue
キーワードはループ内の残りのコードをスキップし、次のイテレーションに進みます。もし$i
の値が8
であれば、break
キーワードはループを終了し、スクリプトの残りの部分に進みます。
それ以外の場合、while
ループは(Write-Host
)を表示して$i
変数の値を1
増やします。
出力の下部に表示されているように、ループは配列の5番目と8番目のアイテムをスキップしました。while
ループは他のすべてのアイテムを処理し、8番目のアイテムに到達した後に終了しました。

while
loop with break
and continue
keywordsWhileループの実行時間の制限
通常、ループの実行時間を制限したい場合があります。おそらく、リモートサーバーに接続しようとしています。その場合、while
ループ内で Start-Sleep
コマンドレットを使用して、サーバーが応答するまで待機し、タイムアウトしてループを終了できます。
Start-Sleep
コマンドレットは、スクリプトの実行を指定された時間だけ一時停止します。
以下のコードを実行して、現在の日付と時刻を取得し、$startTime
変数に保存します。while
ループは、現在の日時が$startTime
に保存された値から10
秒未満の間実行されます。
while
ループが実行されると、Start-Sleep
コマンドレットがスクリプトの実行を1
秒間一時停止します。
以下のコードブロックは、実際の使用時に必要な内容に基づいたものです。ループ内のコードを必要に応じて追加できます。
以下に、ループが終了する前に10秒間継続して実行されるのが見えます。

while
loop runs結論
PowerShellのwhile
ループは、複雑な概念に直面したときにループに詰まるのを避けたり、スクリプトを書く際に便利です。そして、このチュートリアルでは、より柔軟で強力なスクリプトを作成するためのwhile
ループのさまざまな方法を学びました。
この新たな知識を活用すれば、可能性は無限大です。だから、なぜ論理演算子やキーワードの使用を最大限にして、スクリプトでタスクを自動化しないのでしょうか?