Lesson 8
制御構文
Lesson 8
Chapter 1
制御構文
PowerShellにおける「制御構文」とは、プログラムの実行を制御するために使用されるコマンドや文のことを指します。
通常、プログラムは上から下へと順次実行されますが、制御構文を使うことで、条件によって行う処理を変える「条件分岐」や同じ処理を繰り返す「繰り返し処理」などを実現することができます。
具体的には、条件分岐には「if」「switch」文があり、繰り返し処理には「for」「foreach」「while」「do-while」などの文があります。また、例外処理には「try-catch-finally」構文があります。
これらの制御構文をうまく使うことで、プログラムをより柔軟かつ効率的に制御することができます。
デバッグする
制御構文などの構文を間違えると、エラーが発生してしまいます。エラーが発生した場合は、エラーメッセージを読み解き、エラーの原因を特定しましょう。エラーの原因が分からない場合は、エラーメッセージを検索してみると、解決策が見つかることがあります。 VSCodeを使用したデバッグにより、変数の値を確認しながらプログラムを実行することもできます。詳細は Lesson11 Chapter7で後述します。

Lesson 8
Chapter 2
条件分岐
PowerShellにおける「条件分岐」とは、ある条件によって行う処理を切り替えるために使用される機能のことを指します。
具体的には、ある条件が「真 (true)」か「偽 (false)」かによって、実行するコードの分岐先を決定することができます。これにより、ある条件に応じてプログラムの挙動を変えたり、特定の処理を行ったりすることができます。
PowerShellでは、条件分岐に「if」「else-if」「else」「switch」などの構文があります。条件によって実行するコードが異なる場合には、これらの構文を組み合わせて、複雑な条件分岐処理を実現することができます。
条件分岐は、プログラムの柔軟性や汎用性を高めるために欠かせない機能の一つであり、PowerShellの基本的な文法として覚えておくと便利です。
複雑な条件分岐処理
複雑な条件分岐処理とは、複数の条件によって実行する処理を変えることが必要な場合を指します。例えば、ある条件によってAを実行し、さらにその中で条件BによってB1、B2、B3のどれかを実行するような場合が挙げられます。このような場合には、条件分岐を入れ子にする「ネスト」を使って複雑な条件分岐処理を実現することができます。ただし、深すぎるネストは可読性を悪化させるため、適度な深さに抑える必要があります。
if
PowerShellにおける「if」は、条件分岐の一種で、指定した条件が「真 (true)」の場合に実行するコードを指定するための構文です。
if構文は、以下のような形式で記述されます。
powershell
if (条件式) {
実行するコード
}
ここで、条件式は真偽値を返す式であり、実行するコードは条件式が真の場合に実行されます。条件式が偽の場合には、実行するコードはスキップされます。
また、条件式が偽の場合に別のコードを実行する場合は、else構文を使用することができます。
powershell
if (条件式) {
実行するコード
} else {
実行するコード
}
if文では、複数の条件分岐を行う場合には、else-if構文を使用することができます。else-ifは、前の条件が偽の場合に、別の条件を評価するために使用されます。
powershell
if (条件式1) {
実行するコード
} elseif (条件式2) {
実行するコード
} else {
実行するコード
}
if文は、PowerShellスクリプトで最も基本的な条件分岐の一つであり、コードの挙動を制御する上で欠かせない構文です。
switch
PowerShellにおける「switch」は、条件分岐の一種で、複数の条件を評価して、該当する条件に対応するコードを実行するための構文です。
switch構文は、以下のような形式で記述されます。
powershell
switch (条件式) {
条件1 {
実行するコード
}
条件2 {
実行するコード
}
条件3 {
実行するコード
}
default {
実行するコード
}
}
ここで、条件式は評価する式であり、条件1、条件2、条件3は、それぞれ別々の条件式であり、それぞれに対応するコードを実行します。defaultブロックは、条件に一致するものがない場合に実行するコードを指定するために使用されます。
switch構文は、複数の条件を判定する必要がある場合に有用であり、if構文よりも複雑な条件分岐を簡潔に記述することができます。また、PowerShellでは、条件に正規表現を使用することができるため、柔軟な条件分岐を実現することができます。
ただし、switch構文はif構文に比べて、性能が劣る場合があるため、大量の条件分岐が必要な場合には、if構文を使用する方が良いでしょう。

Lesson 8
Chapter 3
ループ処理
PowerShellにおける「ループ処理」とは、同じ処理を繰り返し実行するための制御構文です。ループ処理を使用することで、繰り返し同じ処理を行うことができ、コードの効率性を向上させることができます。
PowerShellには、主に以下の3つのループ構文があります。
- Forループ:指定された回数だけ繰り返します。
- Whileループ:条件式がtrueである限り、繰り返します。
- Do-Whileループ:最初に1度だけ処理を行い、条件式がtrueである限り、繰り返します。
これらのループ構文を適切に使用することで、プログラムの処理を自動化し、簡単かつ迅速に複雑なタスクを実行することができます。ただし、無限ループに陥ったり、処理が期待通りに進まない場合があるため、注意深くプログラムを作成する必要があります。
while
PowerShellにおける「while」とは、ある条件がtrueである限り、繰り返し同じ処理を実行するループ構文です。条件式がtrueである限り、繰り返し同じ処理を行うため、繰り返し回数をあらかじめ指定するforループと異なり、繰り返し回数が未定の場合に使用されます。
whileループの基本構文は以下のようになります。
powershell
while (条件式) {
# 処理
}
このコードの意味は、次のようになります。 「条件式がtrueの場合、処理を実行し、その後、条件式を再び評価します。条件式がfalseになるまで、同じ処理を繰り返します。」
条件式には、大小比較や論理演算子を使うことができます。そして、処理とは、{}で囲まれた中に書かれたプログラムのことを指します。中括弧{}は、処理をグループ化するために使います。 ただし、while文は無限ループに陥る可能性があるので、十分注意して使用する必要があります。
以下は、1から10までの数字を順番に表示するプログラムの例です。
powershell
$i = 1
while ($i -le 10) {
Write-Host $i
$i++
}
このプログラムでは、$iという変数に初期値1を代入し、1から10までの数字を順番に表示します。ループの条件式である「$i -le 10」は、「$iが10以下の場合にループを継続する」という意味です。ループの中で、Write-Hostコマンドレットによって、変数$iの値が表示されます。そして、$iに1を加えることで、次の数字を表示するための準備をします。$iが11になった時点で、条件式がfalseとなり、ループが終了します。
do
「do-while」ループは、条件式の評価を最後に行うため、最低1回は処理を実行するループ構文です。このループは、繰り返し回数が不明な場合に使用されます。
「do-while」ループの基本構文は以下のようになります。
powershell
do {
# 処理
} while (条件式)
この構文では、最初に「do」の後ろに中括弧{}で囲まれた処理を記述します。次に、処理が1回実行された後に、「while」の後ろの条件式を評価します。条件式がtrueである場合は、処理が繰り返し実行されます。一方、条件式がfalseである場合は、ループが終了します。このように、「do-while」ループは、必ず最低1回は処理を実行することが保証されます。
以下は、ユーザーから入力された数字が10以上である限り、入力を繰り返し要求し、それ以外の場合は処理を終了する例です。
powershell
do {
# ユーザーから入力を要求する
$num = Read-Host "数字を10以上で入力してください"
} while ($num -lt 10) # 入力値が10未満の場合、再度入力を要求する
#入力された数字を表示する
Write-Host "入力された数字は $num です。"
この例では、ユーザーからの入力は「Read-Hostコマンドレット」を使って要求されています。条件式では、入力された値($num)が10未満の場合は再度入力を要求し、10以上である場合はループを終了します。最後に、入力された数字($num)を表示するために「Write-Host」が使用されています。
do-whileループを使用することで、必ず1回は処理が実行されることが保証され、コードの可読性が向上する場合があります。ただし、無限ループに陥ったり、処理が期待通りに進まない場合があるため、注意深くプログラムを作成する必要があります。
for
「for」ループは、あらかじめ指定された回数分、同じ処理を繰り返すループ構文です。このループは、特定の回数だけ処理を繰り返す場合に使用されます。
「for」ループの基本構文は以下のようになります。
powershell
for (初期化子; 条件式; 増分子) {
# 処理
}
この構文では、最初に、初期化子、条件式、増分子を丸括弧()で囲んで指定します。そして、その後ろに中括弧{}で囲まれた処理を記述します。初期化子は、ループの最初に一度だけ実行されます。条件式は、ループが実行されるかどうかを判断するために評価されます。増分子は、各ループの最後に実行され、変数の値を更新します。
増分子
増分子とは、forループにおいて、各ループの最後に実行される処理のことです。増分子は、指定した変数の値を更新するための式で、変数に対して加算や減算などの演算を行います。例えば、変数$iに1を加算する場合、増分子は「$i++」となります。増分子を用いることで、ループ内で処理する回数を調整することができます。
以下は、forループを使用して、1から5までの数字を出力する例です。
powershell
for ($i = 1; $i -le 5; $i++) {
Write-Host $i
}
この例では、変数$iに初期値1が代入され、条件式$i -le 5が評価され、$iが5以下の場合は処理が繰り返されます。$i++により、変数$iがループごとに1ずつ増加し、1から5までの数字が順番に出力されます。
forループは、あらかじめ繰り返し回数が決まっている場合に有用です。また、whileループと同様に、無限ループに注意する必要があります。
foreach
PowerShellにおける「foreach」は、配列やリストなどのコレクションを反復処理するためのループ構文です。foreachループは、各要素に対して一度だけ処理を行い、処理が完了したら次の要素に移動します。foreachループを使用することで、簡単に配列やリストのすべての要素を処理することができます。
foreachループの基本構文は以下のようになります。
powershell
foreach ($item in $collection) {
# 処理
}
この構文では、foreachの後ろに丸括弧()で囲まれた$item(要素)と$collection(配列やリストなどのコレクション)を指定し、その後に中括弧{}で囲まれた処理を記述します。$itemは、各要素を参照するための変数であり、$collectionは反復処理するコレクションです。
以下は、foreachループを使用して、配列の各要素を出力する例です。
powershell
$array = @(1, 2, 3, 4, 5)
foreach ($item in $array) {
Write-Host $item
}
この例では、配列$arrayが宣言され、foreachループで各要素が順番に変数$itemに代入され、Write-Hostコマンドレットを使用して要素が出力されます。
また、foreachループを使用する場合、反復処理中に配列の要素を変更することはできません。要素を変更する必要がある場合は、forループを使用する必要があります。

Lesson 8
Chapter 4
ループの制御
ループの制御とは、ループ処理の中である条件を満たした場合に、ループを中断したり、スキップしたりすることです。これにより、ループ内で特定の条件に基づいてプログラムの流れを制御することができます。プログラムで頻繁に使用されるループ処理の中で、特定の条件を満たした場合に、適切な制御構文を使用してループを制御することが重要です。制御構文には、以下のようなものがあります。
制御構文 | 説明 |
---|---|
break | ループを強制的に終了し、次の処理に移ることができます。 |
continue | ループ内の特定の条件が満たされた場合、その条件をスキップして、次の処理に移ることができます。 |
return | ループ内で定義された関数を抜け出し、呼び出し元の処理に戻すことができます。 |
これらの制御構文を使用することで、ループ内で柔軟なプログラムの流れを作ることができます。
break
「break」とは、PowerShellで使われるループ処理を中断するためのコマンドです。ループ処理が実行されている間に、特定の条件が満たされた場合、ループ処理を即座に中断することができます。例えば、ループ処理が5回繰り返され、変数$i$の値が3の場合、以降の処理を実行せずにループ処理を中断することができます。
例えば、以下のようなコードがある場合、変数$i$が3の場合にループ処理を中断することができます。
powershell
for ($i = 1; $i -le 5; $i++) {
if ($i -eq 3) {
break
}
Write-Host $i
}
この場合、$i$の値が1のときにWrite-Host $iが実行され、続いて$i$の値が2のときにも同様に実行されます。しかし、$i$の値が3になると、if文がtrueを返し、breakが実行されます。これにより、ループ処理が即座に中断され、残りの$i$の値(4と5)に対する処理は実行されません。
「break」は、forループ、whileループ、do-whileループ、foreachループなど、さまざまなループ処理で使用することができます。ループ処理の途中で終了する必要がある場合は、「break」を使用することで効率的にコーディングできます。
continue
「continue」とは、PowerShellで使われるループ処理を一時的に中断し、次の繰り返しに進むためのコマンドです。ループ処理が実行されている間に、特定の条件が満たされた場合、ループ処理を中断せず、次の繰り返しに進むことができます。
例えば、以下のようなコードがある場合、変数$i$が3の場合に$i$を処理せずに、次のループ処理に進むことができます。
powershell
for ($i = 1; $i -le 5; $i++) {
if ($i -eq 3) {
continue
}
Write-Host $i
}
この場合、$i$の値が1のときにWrite-Host $iが実行され、続いて$i$の値が2のときにも同様に実行されます。しかし、$i$の値が3になると、if文がtrueを返し、continueが実行されます。これにより、ループ処理が一時的に中断され、次の繰り返しに進みます。そのため、$i$の値が4のときにはWrite-Host $iが実行され、最後に$i$の値が5のときにも同様に実行されます。
「continue」は、forループ、whileループ、do-whileループ、foreachループなど、さまざまなループ処理で使用することができます。ループ処理の途中で一時的に中断して、次の繰り返しに進む必要がある場合は、「continue」を使用することで効率的にコーディングできます。
return
PowerShellにおける「return」とは、関数内での処理を終了して、指定した値を返すために使用されるキーワードです。関数は、一連のコマンドレットやスクリプトをグループ化する方法です。関数内で実行されたコマンドは、関数の実行が完了すると自動的に廃棄されます。しかし、関数から戻る値が必要な場合、「return」を使用して関数内で値を返すことができます。
指定した値を返す
「指定した値を返す」とは、関数内で計算された結果や処理の結果を、関数を呼び出した箇所に戻して返すことを指します。具体的には、関数内で「return」というキーワードを使用して、返したい値を指定することで実現されます。
以下は、例として「return」を使用した関数の定義です。
powershell
function Multiply-Numbers {
param($num1,$num2)
$result = $num1 * $num2
return $result
}
上記の関数「Multiply-Numbers」は、2つの引数「$num1」と「$num2」を受け取り、それらの乗算結果を返します。関数内で計算された結果は、「return $result」で関数外に返されます。
以下は、上記の関数を呼び出して結果を取得するためのコード例です。
powershell
$result = Multiply-Numbers 2 3
Write-Output $result
上記のコードは、関数「Multiply-Numbers」を呼び出して2と3を乗算した結果を取得し、「Write-Output」コマンドレットを使用して結果を表示します。結果は6になります。
例えば、以下のコードでは、変数$iが3になった場合にループを中断し、returnが実行されるため、ループの外側の処理が実行されます。
powershell
for ($i = 1; $i -le 5; $i++) {
if ($i -eq 3) {
return
}
Write-Host $i
}
Write-Host "Loop finished."
