フロー制御

完了

フロー制御とは、コンソールまたはスクリプトでのコードの実行方法を指します。 ここでは、コードがたどるフローと、そのフローを制御する方法について説明します。 フローを制御するために使用できるさまざまなコンストラクトがあります。 コードはすべてのステートメントを実行することも、その一部だけを実行することもできます。 また、特定の条件を満たすまで、特定のステートメントを繰り返すこともできます。

これらのフロー制御のコンストラクトを調べて、これらで行える処理を見てみましょう。

  • 入力をサニタイズします。 スクリプトでパラメーターを使用する場合は、意図したとおりにスクリプトが動作するように、パラメーターに適切な値が保持されるようにする必要があります。 このプロセスを管理するコードの記述を、入力のサニタイズと呼びます。

  • 実行フローを制御します。 前の手法を使用すれば、適切で正しい入力データを取得できます。 この手法はむしろ、コードの実行方法の決定に関するものです。 設定した値により、実行するステートメントのグループを特定できます。

  • データを反復処理します。 データの形式が配列であることがあります。これは、多くの項目が含まれるデータ構造です。 このようなデータについては、各項目を調べて、それぞれに対して操作を実行することが必要になる場合があります。 PowerShell の多くのコンストラクトがそのプロセスに役立ちます。

    配列の反復処理については、このモジュールでは扱いません。 PowerShell では、フロー制御を処理するためのコンストラクトが多数あります。 それらの名前をすべて挙げることはできませんが、読み取ったり記述したりするスクリプトで遭遇する可能性の高い重要な一部について説明します。

IfElseIfElse を使用して、入力および実行フローを管理する

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 に評価されるすべてのケースをキャプチャします。 IfElse を組み合わせると、コードにより、2 つのコンストラクトのいずれかでステートメントが実行されます。 前のコードを変更して、Else コンストラクトを追加してみましょう。

$Value = 3
If ($Value -le 0) 
{
  Write-Host "Is negative"
} Else {
  Write-Host "Is Positive"
}

Else の閉じかっこの横に If を配置したため、1 つとして機能する結合されたコンストラクトを作成しました。 このコードをコンソールで実行すると、Is Positive が出力されることがわかります。 これは IfFalse に評価されるものの、ElseTrue に評価されるためです。 したがって、Else によりそのステートメントが出力されます。

Else を使用できるのは、そのすぐ上に If コンストラクトが定義されている場合に限られます。

ElseIf

IfElse で、コードが取ることのできるすべてのパスを網羅します。 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 を定義する必要があります。