如何在 PowerShell 中從 Foreach 物件退出
-
使用
break條件退出 PowerShell 中的ForEach-Object -
使用
if和break退出 PowerShell 中的ForEach-Object -
使用
if和return退出 PowerShell 中的ForEach-Object -
使用
if和continue退出 PowerShell 中的ForEach-Object - 結論
ForEach-Object Cmdlet 允許用戶遍歷集合並對每個輸入對象中的項目進行操作。在 ForEach-Object 中,輸入對象通過管道傳遞到 cmdlet 或使用 -InputObject 參數指定。
在 PowerShell 中構建 ForEach-Object 命令有兩種不同的方式:腳本塊 和 操作語句。ForEach-Object cmdlet 執行每個輸入對象的腳本塊或操作語句。
使用 腳本塊 來指定操作。$_ 變數在腳本塊中用來表示當前輸入對象。
腳本塊 可以包含任何 PowerShell 腳本。例如,以下命令獲取每個 cmdlet 的 Name 屬性、函數和安裝在計算機上的 別名 的值。
Get-Command | ForEach-Object { $_.Name }
另一種構建 ForEach-Object 命令的方法是使用 操作 語句。您可以使用操作語句指定屬性值或調用方法。
Get-Command | ForEach-Object Name
有時,當您可能想要退出 ForEach-Object 時,情況會有所不同,因為它的工作原理與 ForEach 語句不同。在 ForEach-Object 中,當生成每個對象時,語句立即執行。
在 ForEach 語句中,所有對象在循環執行之前都會被收集。ForEach-Object 是一個 cmdlet,而不是一個實際的循環。
當您使用 break 或 continue 退出循環時,整個腳本會被終止,而不是跳過之後的語句。但是,在 PowerShell 中可以使用某些條件退出 ForEach-Object 對象。
使用 break 條件退出 PowerShell 中的 ForEach-Object
在 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,導致循環終止。
輸出:

使用 if 和 break 退出 PowerShell 中的 ForEach-Object
有時,根據特定條件需要提前退出這個循環。if 方法提供了一種直接的方法,通過在循環內部評估條件並在滿足條件時觸發退出來實現此任務。
在這種方法中,您需要在對象的集合中使用 empty 值以退出 PowerShell 的 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 輸出當前數字。
輸出:

使用 if 和 return 退出 PowerShell 中的 ForEach-Object
使用 if 和 return 方法退出 PowerShell 中的 foreach-object 循環可以根據特定條件提前終止循環。當需要停止循環執行並在滿足某些條件時將控制權返回給調用者時,此方法特別有用。
在循環內部,使用 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 輸出當前數字。
輸出:

使用 if 和 continue 退出 PowerShell 中的 ForEach-Object
在 PowerShell 中,continue 語句用於跳過循環當前迭代的其餘部分,並轉向下一次迭代。雖然主要用於循環中以跳過特定迭代,但 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 cmdlet 促進了對集合的迭代,允許對每個項目進行單獨操作。我們探討了幾種方法來提前退出 ForEach-Object 循環,包括使用 break、return 和 continue。
雖然 break 和 continue 提供了循環內的直接控制流,但 return 提供了一種替代方法來退出循環並返回給調用者。每種方法都有其自己的用例和優點,為腳本執行提供了靈活性。
未來,使用者可以通過在不同場景中實驗這些方法,加深他們的理解,探索它們的細微差別,並掌握它們在 PowerShell 腳本中的應用。
