スクリプトは決定を下すことができます。 どう? 条件付きロジックと呼ばれる概念を使用して。 PowerShellのifステートメントとif/else構文は、条件を定義する一般的な方法です。
PowerShellスクリプトを記述するときは、特定のタスクまたはタスクを念頭に置いて作成します。 ただし、操作は、一つ以上の条件に基づいて複数の可能なアクションを持つことができます。 この状況では、PowerShellのIf-Else構造が登場します。,
この記事では、PowerShell If-Else構造が何であるか、その構文とその仕組みを理解します。 また、PowerShell If-Elseを使用してスクリプトに条件付きロジック処理を追加するさまざまな方法のいくつかの例から学びます。
目次
PowerShellのIf-Else構文について
PowerShellのif-else構文は、一つ以上の条件式を評価します。 以下にIf文の構文を示します。 このスタイルと呼ばれることもあります!,
if (<test1>) {<statement list 1>}
上記の構文からわかるように、各テストは括弧で囲まれています()
。 テストは、比較演算子や論理演算子などの異なる演算子を使用することができます。
ステートメントリストには、テストの結果がtrueと評価された場合に実行することを意図したコードが含まれています。
次に、If文グループには三つの可能な文があります。 これらはIF、ELSEIF、およびELSEステートメントです。,
-
if
ステートメントには、評価する最初のテストが含まれ、その後に中括弧で囲まれた最初のステートメントリストが含まれます{}
。PowerShell if文は、存在する必要がある唯一の文です。 -
elseif
ステートメントは、条件を追加する場所です。 複数の条件を指定する場合は、複数のElseIf文を追加できます。 PowerShellは、これらの条件のそれぞれを順番に評価します。 -
else
ステートメントは条件を受け入れません。, の文一覧本書に含まれるコード実行の場において、前条件の試験はfalseです。
PowerShellのIf-Elseロジックフローの理解
PowerShellのIf-Elseがどのように機能するかをさらに理解するには、そのロジックフローに慣れる必要があります。 次の図は、PowerShell If-Elseの基本的なフローを示しています。,
ifステートメントが実行されると、PowerShellはコードがtrueまたはfalseを返すかどうかを評価する各条件を実行します。 動作の概要は以下のとおりです。
- PowerShellはテスト1の条件を評価します。
- テスト1の結果がtrueを返す場合、If文リスト内のコードが実行され、PowerShellはIf文を終了します。,
- テスト1の結果がfalseを返す場合、PowerShellは次のElseIfステートメントで条件(テストn)を評価し続けます。
- テストnの結果がfalseを返す場合、PowerShellは次のElseIfステートメントで条件(Test n)を評価し続け、別のElseIfステートメントが存在する場合-または-
- テストnの結果がfalseを返す場合、Elseステートメントのコードが実行されます。 次に、PowerShellはIfステートメントを終了します-OR-
- Test nの結果がtrueを返すと、ElseIfステートメントのコードが実行されます。 その後、PowerShellはIfステートメントを終了します。,
PowerShell If-Elseステートメントの使用
次のセクションでは、スクリプトを記述するときにPowerShell If-Elseステートメントを使用する方法の例をいくつか示します。 あなたが学ぶテクニックは、その使用を必要とする現実の状況に遭遇した場合にIf文を使用する際にあなたを導くことができます。
単一のIf-Else条件
最も基本的なものから始まるのは、単一のIf文です。 テストする条件が一つしかない場合は、単一のif文を使用する必要があります。
以下の例では、$num
変数の値が10より大きいかどうかをテストします。, 結果がtrueの場合、"$num is greater than 10"
という結果が画面に表示されます。 結果がfalseの場合、テストする条件は一つしかないため、PowerShellは何もしません。
$num = 11if ($num -gt 10) { "$num is greater than 10"}
上記のコードをPowerShellに貼り付けると、以下の結果が得られます。,
テスト結果がfalseのときにPowerShellに何もさせないのではなく、デフォルトの”フォールバック”アクションを追加する場合は、Elseステートメントを追加できます。
以下の例では、Elseステートメントのコードは、$num
変数の値が10以下の場合に実行されます。
$num = 9if ($num -gt 10){ "$num is greater than 10"}else{ "$num is NOT greater than 10"}
PowerShellで変更されたコードを実行すると、以下に示す出力が得られます。,
PowerShell7.0から、三項演算子を使用したIfステートメントの新しい構文が導入されました。 単一のIf文は、この新しい構文をうまく利用できます。
上記の同じ例を使用して、これはコードが三項演算子でどのように見えるかです。,
$num = 11$num -gt 10 ? "$num is greater than 10" : "$num is NOT greater than 10"
ElseIfを使用した複数のIf-Else条件
評価する条件が複数ある場合は、elseifステートメントを追加する必要があります。 各ElseIfステートメントには、テスト式と実行する独自のコードが含まれます。,
以下のスクリプトは、実行されると、CTRL+C
キーストロークが発行されるか、ユーザーが文字”X
“を入力するまで、フルーツ名の入力を求め続けます。
次に、If文は、一致するものが見つかるまで順番に各条件を通過します。 入力が条件のいずれにも一致しなかった場合、Elseステートメント内のコードが実行されます。
以下は、PowerShellで実行しているときに上記のスクリプトがどのように動作するかのデモです。,
空きディスク領域のステータスのレポート
空きディスク領域のレポートは、システム管理者 Windowsマシン上の固定ディスクのスペース情報を報告する通常の方法は、以下のコードを中心に展開されます。
Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}
上記のコードが返す情報は、この次のスクリーンショットに示されているようなものになります。,
ご覧のとおり、上記の出力はドライブ文字と空き領域の値、および他のプロパティを示しています。 上記の出力は問題ありませんが、直感的ではありません。 情報が表示される方法は、ディスク領域が重大または警告状態または通常の状態であるかどうかを示すものではありません。,
PowerShell Ifステートメントを使用してコードを改善する
PowerShell If-Elseステートメントを使用すると、空き領域が特定のしきい値を超えているかどうかをチェックする条件を追加することで、より直感的な出力を実現できます。 そして、これらのしきい値は、空きディスク領域の状態を定義します。
以下のスクリプト例では、次のことを実行します。
- 変数
$Critical
の値を使用して、空き領域のパーセントがクリティカルとしてタグ付けされるしきい値を定義します。, - 変数
$Warning
の値を使用して、空き領域のパーセントが警告としてタグ付けされるしきい値を定義します。 - ローカルマシンからすべての固定ディスク情報を取得します
- すべてのディスク情報をループして空き領域を決定し、そのステータスにタグを付けます。
- 空き領域の割合が
$Warning
変数の値よりも高い場合、ディスク領域の状態は通常としてタグ付けされます。, - 空き領域の割合が
$Critical
変数の値よりも高い場合、ディスク領域の状態は警告としてタグ付けされます。 - 空き領域の割合が
$Critical
変数の値以下の場合、ディスク領域のステータスはcriticalとしてタグ付けされます。
- 空き領域の割合が
- オブジェクトプロパティを作成します
'Drive Letter'
、'Drive Name'
、'Total Space (GB)'
、'Free Space (GB)'
、'Free Space (%)'
、および'Status'
。, - 最終レポートを返します
以下のコードをコピーし、ファイル名Get-DiskSpace.ps1
でスクリプトを保存します。 異なるしきい値でテストする場合は、$Critical
および$Warning
変数の値を変更することを忘れないでください。
スクリプトが保存されたら、PowerShellでその名前を呼び出してテストします。 以下は、このスクリプトの仕組みのサンプルデモです。,
出力からわかるように、各ディスクのステータスは、PowerShell If-Elseで複数の条件を使用した結果である空きディスク領域
複数のネストされたIf-Else
else
ブロックで定義された条件を持つif-elseステートメントがあるとしましょう。, If-elseステートメントが実行されると、else
ブロック内のコードがif
ブロックがfalseを返す場合、else
ブロックが呼び出されます。
else
ブロックの中で、別の条件付きテストを実行する必要があります。 その結果、別のIf-Else文が必要になります。 このシナリオはネストされたIf-Elseと呼ばれます。 ネストされたIf-Elseステートメントは、内側のIf-Elseが外側のIf-Elseでの操作の結果に依存する場合に一般的に使用されます。
複数のif-Else文とネストされたIf-Else文を使用すると、非常に混乱する可能性があります。, 重要なポイントは、足場の配置を覚えて、コードをインデントすることを確認することです。 コードをインデントすると、If-Else文を簡単に認識して分離するのに役立ちます。
複数の/ネストされたIf-Elseステートメントの例
以下のスクリプト例は、複数のIf-ElseとネストされたIf-Elseが互いの結果にどのように依存するか 以下のコードのロジックは次のとおりです。
- もし
$SendEmail
ある$false
、スクリプトは何もしないと終了します。,li> -
$SendEmail
が$true
の場合、$From
および$To
変数は空またはnullであってはなりません。 それ以外の場合、$abortFlag
は1に設定されます。li> -
$SendEmail
が$true
であり、$CCEnabled
が$true
の場合、$CC
変数は空またはnullであってはなりません。 それ以外の場合、$abortFlag
は1に設定されます。,li> -
$SendEmail
が$true
であり、$BCCEnabled
が$true
の場合、$BCC
変数は空またはnullであってはなりません。 それ以外の場合、$abortFlag
は1に設定されます。li> -
$abortFlag
値が1の場合、スクリプトはこの時点で終了し、続行されません。 -
$abortFlag
値が0の場合、スクリプトは最後まで続きます。
以下のコードをコピーし、Send-MyMail.ps1
として保存します。 まだ値を変更しないでください。,
ファイルを保存したら、以下に示すようにPowerShellで実行します。 以下のデモは、変数値が変更されなかった場合のスクリプトの結果を示しています。
次に、スクリプトを編集し、以下のスニペットのようにすべての変数を適切に更新します。
変数を編集した後、スクリプトを保存して再度実行します。 以下に示すように、同じ結果が表示されるはずです。,
変数を変更し、ネストされたIf-Elseがどのように影響を受けるかをテストします。 自分で変更してテストすると、ロジックをさらに理解するのに役立ちます。
概要
この記事では、条件付きロジック構造、つまりPowerShellのIf–Else構造について学びました。, 利用にはIf-Else文が可能scripters策定のための条件付きの論理と直接そのスクリプト’を踏まえた対応をしています。
この記事に示す例では、意思決定駆動型コードを作成するときにIf-Elseステートメントを使用する方法とテクニックを学んでおく必要があります。 If-Elseは単一の条件を使用して単純にすることができ、入れ子になったIf-Else文をより深く掘り下げると、より複雑になります。
If-Else文についてどう思いますか? これはあなたがこの記事を読んだ後ますます使用すると思うものですか?, ここで得た知識をどこに応用できるのか、他にどのような目的を考えることができますか?
さらに読む
- Ifについて
- 基本に戻る:PowerShell foreachループ