在本 PowerShell 教程中,我们将向您展示如何使用 For 循环、ForEach-Object 循环以及 While、Do-While 和 Do-Until 循环。
最基本的 PowerShell 循环只是将同一组命令重复一定次数。非常适合在设定的时间段或一定数量的记录内执行一致的操作,循环可以大大简化您的脚本。PowerShell 尤其具有许多 cmdlet——尤其是那些以动词 Get 开头的 cmdlet——它们返回包含大量相似数据的对象。
PowerShell 中有多种类型的循环可用,在许多情况下,可以有效地使用不止一种循环技术。从性能或代码可读性的角度来看,有时需要确定最有效的循环类型。
ForEach-对象循环
在许多情况下,使用 ForEach-Object cmdlet(之前在我们关于使用 PowerShell 对象的文章中讨论过)是循环对象的最佳方式。最简单的是,ForEach-Object 只需要一个要循环的对象和一个包含要对对象的每个成员执行的命令的脚本块。
这些参数可以通过 -InputObject 和 -Process 参数名称来指定,或者通过将对象通过管道传送到 ForEach-Object cmdlet 并将脚本块作为第一个参数来指定。为了说明这个基本语法,下面的例子展示了两种使用 ForEach-Object 循环用户 Documents 文件夹内容的方法:
$myDocuments = Get-ChildItem $env:USERPROFILEDocuments -File $myDocuments | ForEach-Object {$_.FullName} ForEach-Object -InputObject $myDocuments -Process {$_.FullName}
在某些情况下,在执行循环之前或之后执行一项或多项操作可能是有益的。-Begin 和 -End 参数可用于定义要在 -Process 脚本块内容之前或之后执行的脚本块。这可用于在循环执行之前或之后设置或修改变量。
ForEach-Object 有两个别名,ForEach 和 %,并且还支持从 PowerShell 3.0 开始的速记语法。以下三个例子在功能上是相同的。
获取 WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace} Get-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace} Get-WMIObject Win32_LogicalDisk | % 可用空间
PowerShell 循环
For 循环通常用于对一组命令进行指定次数的迭代,或者单步执行数组或对象,或者只是根据需要重复相同的代码块。For 循环是通过在进入循环时设置变量的值、应终止循环的条件以及每次通过循环对该变量执行的操作来构造的。
以下示例显示了用于创建乘法表的基本 For 循环:
对于 ($i=0; $i -le 10; $i++) { “10 * $i = ” + (10 * $i) }
For 循环可用于通过将初始值设置为数组的初始索引并逐步增加值直到满足数组长度来逐步遍历数组值。数组索引是通过将递增的变量放在紧跟变量名称的方括号内来指定的,如下例所示:
$colors = @(“Red”,”Orange”,”Yellow”,”Green”,”Blue”,”Indigo”,”Violet”) For ($i=0; $i -lt $colors.Length; $ i++) { $颜色[$i] }
While、Do-While 和 Do-Until 循环
PowerShell 支持的第三种类型的循环涉及设置一个条件,只要条件为真或满足条件,就允许循环处理。While 和 Do-While 循环都用于在条件计算为 $true 时执行操作,并且仅在语法上有所不同。Do-Until 循环的语法与 Do-While 相似,但在满足条件语句后停止处理。
Do-While 和 Do-Until 循环都以 Do 关键字开头,位于脚本块的前面,然后是条件关键字(While 或 Until)和条件。例如,以下两个循环的功能相同,只是条件相反:
$i=1 执行 { $i $i++ } While ($i -le 10)$i=1 执行 { $i $i++ } 直到 ($i -gt 10)
While 循环与 Do-While 循环的执行方式相同,只是语法略有不同。While 循环仅使用 While 关键字,后跟条件,最后是脚本块。此循环在功能上与前面的示例相同,并且使用与 Do-While 循环相同的条件:
$i=1 While ($i -le 10) { $i $i++ }
这三种循环类型中的任何一种——Do-While、Do-Until 和 While 循环——也可以用于无限循环;While 和 Do-While 循环条件设置为 $true 和 Do-Until 条件设置为 $false。
在某些情况下,您可能需要根据循环条件以外的其他因素提前退出循环。在这种情况下,可以调用 Break 关键字以退出循环。最后一个示例显示了相同的功能,但使用无限循环和 Break 关键字在适当的时间退出:
$i=1 While ($true) { $i $i++ if ($i -gt 10) { Break } }
有关的:
PowerShell 比较运算符和条件逻辑
PowerShell:使用变量、数组和哈希表
PowerShell 基础:管理文件和文件夹