PowerShell 是一種功能強大的指令碼語言,提供了許多自動化和管理基於 Windows 的系統的功能。其中一個最常用的構造是 PowerShell 的 `while` 迴圈。
如果您在學習 PowerShell 指令碼時陷入無限迴圈,請不要擔心。讓 PowerShell 的 `while` 迴圈引導您走向偉大的脫逃之路。在這個教程中,您將回到使用 PowerShell 撰寫指令碼時使用 `while` 迴圈的基礎。
繼續閱讀,將您的 PowerShell 指令碼技能提升到更高的水平!
先決條件
本教程將進行實際演示。要跟隨操作,請確保您具備以下條件:
- A Windows machine – This tutorial uses Windows 10.
- 安裝了 Windows PowerShell 5.0 或更高版本 – 本教程使用 PowerShell 7。
- A user account with administrator privileges.
執行單個條件的 `while` 迴圈
單個條件類型的 `while` 迴圈是最簡單的一種。與 `If` 語句不同,此類型的迴圈執行一組給定的命令,只要指定的條件求值為 true。當返回“False”時,迴圈中止,並且執行繼續進行其餘部分的腳本。
以下是單條件while
迴圈的語法:
- 第一件事是注意到括號的使用。條件必須被括在括號內,而代碼塊是一組PowerShell命令,當條件為真時執行。
- 第二點要注意的是,條件必須返回一個布爾值,該值評估為True或False。
運行下面的代碼,其中$val
的值從0
開始,每次代碼塊運行時增加1
,直到$val
變量的值等於3
為止。
當$val
達到3
的值,使條件為False,迴圈中斷,執行繼續進行腳本的其餘部分。

使用內建變數 ($true
/$false
) 執行 PowerShell While 迴圈
先前的範例,在 while
迴圈中使用條件是有效的。但是您也可以使用 PowerShell 的內建變數,如 $true
和 $false
,來建立一個 While
迴圈。
以下語法執行直到 $true
不再是 $true
為止。換句話說,迴圈將永遠運行。但您必須始終包含一種方法來跳出無限迴圈。否則,您將永遠受困。您稍後將進一步了解如何使用 break
和 continue
從迴圈中跳出。
執行下面的程式碼區塊,它將永遠運行,並將 $i
的值列印到控制台中。
現在,按 Ctrl+C 來跳出迴圈。這個迴圈消耗大量系統資源,因此在使用時要小心。

while
loop with PowerShell’s built-in ($true
) variable執行多條件 While
迴圈
此外,除了單一條件的while
迴圈外,您還可以創建多條件的while迴圈。與單一條件while
迴圈一樣,條件必須返回布爾值,即True或False。
以下是多條件while
迴圈的語法,類似於單一條件while
迴圈的語法。主要區別在於您可以包含多個條件,這些條件之間使用以下運算符分隔:
- AND(
-and
)- 必須滿足兩個條件。 - OR(
-or
)(任一條件都可以為真)。
執行下面的代碼,當$val
不等於(-ne
)3
且$i
不等於(-ne
)5
時,循環while
。
當兩個變數的值同時滿足各自的條件時,循環中斷,執行繼續進行腳本的其餘部分。

使用 AND 运算符执行 while
循环

while
loop with AND operator现在,执行以下代码,询问用户年龄,存储在变量 $age
中。
如果用户输入数字小于 (-lt
) 1
或不是数字 (-nomatch
),则提示用户重新输入有效数字。这种行为对于给用户多次输入有效输入的机会很有用。
在下面的输出中,您可以看到用户被提示三次输入他们的年龄,如下所示:
- 第一次,用户输入了ten,这不是一个数字。
- 第二次,用户输入了0,这是小于1的数字。
- 第三次,用户输入了10,这是一个有效的年龄。

while
loop with the OR operator在While循环中使用BREAK和CONTINUE关键字
您已经看到了如何使您的PowerShell脚本更加灵活。但是为了更好地控制While循环的执行,可以添加break和continue关键字。
例如,如果您只想处理数组中的一定数量的项,可以使用BREAK关键字在处理完所需数量的项后退出循环。
这些关键字的功能如下:
Keyword | Function |
---|---|
break | Immediately exits the loop and continues execution with the rest of the script. |
continue | Skips over the remaining code block in the current iteration of the loop and continues with the next iteration. |
执行下面的代码,它循环遍历一个包含10个项的数组。
在下面的代码中,if语句检查$i的值。如果$i的值为5,则continue关键字跳过循环中剩余的代码,继续下一次迭代。如果$i的值为8,则break关键字退出循环,并继续执行脚本的其余部分。
否则,while循环将打印(Write-Host)并将$i变量的值增加1。
正如您在下面的輸出中所看到的,迴圈跳過了陣列的第五和第八項。 while
迴圈處理了陣列中的所有其他項目,並在達到第八項後退出。

while
loop with break
and continue
keywords限制 While 迴圈執行的時間
通常,您可能希望限制迴圈運行的時間。也許您正在嘗試連接到遠程服務器。如果是這樣,您可以在 while
迴圈內使用 Start-Sleep
cmdlet 給予服務器在超時之前回應的時間,然後退出迴圈。
Start-Sleep
cmdlet 暫停腳本的執行一段指定的時間。
執行下面的程式碼以獲取並儲存當前日期和時間 Get-Date
到 $startTime
變數中。 while
迴圈在當前日期/時間小於 $startTime
變數中的值加上 10
秒時運行。
當 while
迴圈運行時,當 Start-Sleep
cmdlet 暫停腳本的執行一秒時,會列印一條訊息。
以下程式碼區塊僅是實際應用中會使用的範本。您可以根據需要在迴圈內放入更多程式碼。
下面,您可以看到循環在退出循環之前繼續運行了 10 秒。

while
loop runs結論
當面對複雜概念時,PowerShell while
循環非常方便,可以避免陷入循環中,或者在編寫腳本時使用。在本教程中,您已經學會了許多使用 while
循環來編寫更靈活和強大的腳本的方法。
有了這些新知識,天空就是你的限制。那麼,為什麼不最大化使用邏輯運算符和關鍵字來自動執行腳本中的任務呢?