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
不等于3
-and
$i
不等于5
时循环。
当两个变量的值达到各自的条件时,循环中断,并继续执行脚本的其余部分。

执行带有AND运算符的while
循环

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

while
loop with the OR operator在 While 循环中使用 BREAK 和 CONTINUE 关键字
您已经看到了 while
循环如何增加您的 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暂停脚本执行1
秒。
<diy8以下代码块仅是实践中实际使用的模板。根据需要在循环内放更多代码。
下面,您可以看到循环在退出循环之前运行了 10 秒。

while
loop runs结论
当面对复杂概念时,PowerShell 的 while
循环非常方便,可以避免陷入循环或在编写脚本时出现问题。在本教程中,您已经学会了许多使用 while
循环编写更灵活、更强大的脚本的方法。
有了这些新知识,您的可能性无限大。那么为什么不最大化使用逻辑运算符和关键字来自动化脚本中的任务呢?