PowerShell の Foreach オブジェクトから退出する方法
-
PowerShell の
ForEach-Objectからbreak条件を使用して退出する -
PowerShell の
ForEach-Objectからifとbreakを使用して退出する -
PowerShell の
ForEach-Objectからifとreturnを使用して退出する -
PowerShell の
ForEach-Objectからifとcontinueを使用して退出する - 結論
ForEach-Object コマンドレットは、ユーザーがコレクションを反復処理し、入力オブジェクトのコレクション内の各アイテムに対して操作を行うことを可能にします。ForEach-Object において、入力オブジェクトはコマンドレットにパイプされるか、-InputObject パラメーターを使用して指定されます。
PowerShell で ForEach-Object コマンドを構築するための 2つの異なる方法があります:スクリプトブロック および 操作ステートメント。ForEach-Object コマンドレットは、各入力オブジェクトのスクリプトブロックまたは操作ステートメントを実行します。
操作を指定するには スクリプトブロック を使用します。$_ 変数はスクリプトブロック内で現在の入力オブジェクトを表すために使用されます。
スクリプトブロック には任意の PowerShell スクリプトを含めることができます。例えば、以下のコマンドは、各コマンドレットの Name プロパティ、関数、およびコンピュータにインストールされている エイリアス の値を取得します。
Get-Command | ForEach-Object { $_.Name }
ForEach-Object コマンドのもう 1つの構築方法は、操作 ステートメントを使用することです。操作ステートメントを使用してプロパティ値を指定したり、メソッドを呼び出したりできます。
Get-Command | ForEach-Object Name
時々、ForEach-Object から退出したい状況があるかもしれませんが、それは ForEach ステートメントとは異なる動作をします。ForEach-Object では、各オブジェクトが生成されるとすぐにステートメントが実行されます。
ForEach ステートメントでは、ループが実行される前にすべてのオブジェクトが収集されます。ForEach-Object は、実際のループではなくコマンドレットです。
ループを退出するために break や continue を使用すると、ステートメントをスキップするのではなく、スクリプト全体が終了します。ただし、PowerShell でいくつかの条件を使って ForEach-Object オブジェクトから退出することは可能です。
PowerShell の ForEach-Object から break 条件を使用して退出する
PowerShell では、foreach-object ループがコレクションやパイプライン内の各アイテムを反復処理するために一般的に使用されます。時折、特定の条件に基づいてこのループを早期に退出する必要が生じます。
break ステートメントは、特定の条件が満たされるとすぐにループを終了するためのシンプルな方法を提供します。
$numbers = "one", "two", "three", "four", "five"
$Break = $False;
$numbers | Where-Object { $Break -eq $False } | ForEach-Object {
$Break = $_ -eq "three";
Write-Host "The number is $_.";
}
このコードスニペットでは、数字を表す文字列を含む配列 $numbers を初期化します。また、最初に $Break を $False に設定します。
foreach-object ループ内で、Where-Object を使用して $Break 変数に基づいてアイテムをフィルタリングします。 $Break が $False の場合、ループは続行されます。さもなければ、停止します。
ループ内で、現在のアイテムが three と等しいかどうかを確認します。等しい場合、 $Break を $True に設定し、ループを終了させます。
出力:

PowerShell の ForEach-Object から if と break を使用して退出する
時には、特定の条件に基づいてこのループを早期に終了させる必要があります。if メソッドは、ループ内で条件を評価し、その条件が満たされたときに退出を促すことで、このタスクを簡単に達成するアプローチを提供します。
このメソッドでは、ForEach-Object から退出するために、オブジェクトのコレクション内で 空 値を使用する必要があります。例えば、if 条件を使用して ForEach-Object から退出することができます。
$numbers = "one", "two", "three", "", "four"
$numbers | ForEach-Object {
if ($_ -eq "") {
break;
}
Write-Host "The number is $_."
}
提供されたコードスニペットでは、数字を表す文字列を含む配列 $numbers を初期化します。foreach-object ループ内で、配列内の各アイテムを反復処理します。
if ステートメントを使用して、現在のアイテム $_ が空の文字列かどうかを確認します。条件が真である場合、break を使用してループからすぐに退出します。
さもなければ、ループは続行され、現在の数を Write-Host を使用して出力します。
出力:

PowerShell の ForEach-Object から if と return を使用して退出する
特定の条件に基づいて早期にループを終了させることができる PowerShell での foreach-object ループから退出するには、if および return メソッドの組み合わせを使用します。このメソッドは、特定の条件が満たされたときにループ実行を停止し、呼び出し元に制御を戻す必要がある場合に特に便利です。
ループ内では、if ステートメントを使用してループから退出する条件を評価します。条件が真である場合、return ステートメントが実行され、ループの実行が即座に終了し、呼び出し元に制御が戻ります。
$numbers = "one", "two", "three", "four", "five"
$numbers | ForEach-Object {
if ($_ -eq "three") {
return
}
Write-Host "The number is $_."
}
提供されたコードスニペットでは、数字を表す文字列を含む配列 $numbers を初期化します。foreach-object ループ内で、配列内の各アイテムを反復処理します。
if ステートメントを使用して、現在のアイテム $_ が three と等しいかどうかを確認します。条件が真である場合、return を使用してループからすぐに退出します。
さもなければ、ループは続行され、現在の数を Write-Host を使用して出力します。
出力:

PowerShell の ForEach-Object から if と continue を使用して退出する
PowerShell では、continue ステートメントはループの現在の反復処理の残りをスキップし、次の反復処理に進むために使用されます。主に特定の反復処理をスキップするためにループで使用されますが、foreach-object ループ内でループの終了を実装するためにも利用できます。
ループ内で continue ステートメントを戦略的に配置し、条件付きロジックを組み合わせることで、特定の条件に基づいてループを早期に終了させることができます。
$numbers = 1..10
$numbers | ForEach-Object {
if ($_ -eq 5) {
continue
}
Write-Host "Number: $_"
}
提供されたコード例では、1 から 10 までの数字を含む配列 $numbers を初期化します。foreach-object ループ内で、配列内の各数字を反復処理します。
if ステートメントを使用して、現在の数字が 5 と等しいかどうかを確認します。条件が真である場合、continue ステートメントが実行され、ループは現在の反復処理をスキップし、次の反復処理に進みます。
これにより、指定された条件が満たされたときにループの早期終了が効果的に実現されます。
出力:

結論
要約すると、PowerShell の ForEach-Object コマンドレットはコレクションを反復処理し、各アイテムに対して個別に操作を行うことを可能にします。我々は、break、return、および continue を使用して ForEach-Object ループから早期に退出するさまざまな方法を探求しました。
break と continue はループ内の制御フローを直接提供しますが、return はループから退出して呼び出し元に戻るための別のアプローチを提供します。各メソッドにはそれぞれの使用ケースと利点があり、スクリプト実行に柔軟性を提供します。
今後、ユーザーはこれらのメソッドをさまざまなシナリオで試すことで理解を深め、それらのニュアンスを探求し、PowerShell スクリプトでの使用を習得することができます。
