フロー制御
フロー制御とは、コンソールまたはスクリプトでのコードの実行方法を指します。 ここでは、コードがたどるフローと、そのフローを制御する方法について説明します。 フローを制御するために使用できるさまざまなコンストラクトがあります。 コードはすべてのステートメントを実行することも、その一部だけを実行することもできます。 また、特定の条件を満たすまで、特定のステートメントを繰り返すこともできます。
これらのフロー制御のコンストラクトを調べて、これらで行える処理を見てみましょう。
入力をサニタイズします。 スクリプトでパラメーターを使用する場合は、意図したとおりにスクリプトが動作するように、パラメーターに適切な値が保持されるようにする必要があります。 このプロセスを管理するコードの記述を、入力のサニタイズと呼びます。
実行フローを制御します。 前の手法を使用すれば、適切で正しい入力データを取得できます。 この手法はむしろ、コードの実行方法の決定に関するものです。 設定した値により、実行するステートメントのグループを特定できます。
データを反復処理します。 データの形式が配列であることがあります。これは、多くの項目が含まれるデータ構造です。 このようなデータについては、各項目を調べて、それぞれに対して操作を実行することが必要になる場合があります。 PowerShell の多くのコンストラクトがそのプロセスに役立ちます。
注
配列の反復処理については、このモジュールでは扱いません。 PowerShell では、フロー制御を処理するためのコンストラクトが多数あります。 それらの名前をすべて挙げることはできませんが、読み取ったり記述したりするスクリプトで遭遇する可能性の高い重要な一部について説明します。
If
、ElseIf
、Else
を使用して、入力および実行フローを管理する
If
コンストラクトを使用して、式が True
であるか False
であるかどうかを判断できます。 その判断に応じて、If
コンストラクトによって定義されたステートメントを実行できます。 If
の構文は、次のようになります。
If (<expression that evaluates to True or False>)
{
# Statement that runs only if the preceding expression is $True.
}
オペレーター
PowerShell には、式が True
であるか False
であるかを判断するための 2 つの組み込みパラメーターがあります。
$True
は、式がTrue
であることを示します。$False
は、式がFalse
であることを示します。
演算子を使用して、式がTrue
であるか False
であるかを判断できます。 いくつかの演算子があります。 通常、演算子の条件が指定されている場合に、演算子の左辺にあるものが右辺にあるものに一致するかどうかを判断するというのが基本的な考え方です。 演算子では、あるものが他のものと等しいか、他のものより大きいか、正規表現に一致するかなどの条件を表現できます。
演算子を使用した例を次に示します。 -le
演算子は、演算子の左辺の値が右辺の値以下であるかどうかを判断します。
$Value = 3
If ($Value -le 0)
{
Write-Host "Is negative"
}
式が False
に評価されるため、このコードでは何も表示されません。 値 3 は明らかに正です。
Else
If
に評価された場合にのみ、True
コンストラクトによってステートメントが実行されます。 False
に評価された場合を処理するにはどうすればよいでしょうか。 この場合に Else
コンストラクトを使用します。 If
は、"この特定のケースが true の場合は、このステートメントを実行します" を表します。Else
は式を取りません。 If
句が False
に評価されるすべてのケースをキャプチャします。 If
と Else
を組み合わせると、コードにより、2 つのコンストラクトのいずれかでステートメントが実行されます。 前のコードを変更して、Else
コンストラクトを追加してみましょう。
$Value = 3
If ($Value -le 0)
{
Write-Host "Is negative"
} Else {
Write-Host "Is Positive"
}
Else
の閉じかっこの横に If
を配置したため、1 つとして機能する結合されたコンストラクトを作成しました。 このコードをコンソールで実行すると、Is Positive
が出力されることがわかります。 これは If
が False
に評価されるものの、Else
が True
に評価されるためです。 したがって、Else
によりそのステートメントが出力されます。
注
Else
を使用できるのは、そのすぐ上に If
コンストラクトが定義されている場合に限られます。
ElseIf
If
と Else
で、コードが取ることのできるすべてのパスを網羅します。 ElseIf
は、役に立つ可能性がある別のコンストラクトです。 ElseIf
は、If
と使用するためのものです。 これは、"先行する If
ステートメントが False
に評価された場合に、このコンストラクトの式が評価されます" という意味です。If
と同様に、ElseIf
は式を取ることができるため、ElseIf
を "セカンダリ if" と考えると役立ちます。
ElseIf
を使用する例を次に示します。
# _FullyTax.ps1_
# Possible values: 'Minor', 'Adult', 'Senior Citizen'
$Status = 'Minor'
If ($Status -eq 'Minor')
{
Write-Host $False
} ElseIf ($Status -eq 'Adult') {
Write-Host $True
} Else {
Write-Host $False
}
このコードはよりコンパクトに記述できますが、この方法では ElseIf
の使用方法が示されます。 ここには If
が最初に、次に ElseIf
が、続いて Else
が評価されている様子が示されています。
注
Else
と同様に、ElseIf
を使用するには、それよりも上に If
を定義する必要があります。