[玩转系统] PowerShell ForEach 循环、ForEach-Object Cmdlet - 初学者指南
作者:精品下载站 日期:2024-12-14 21:26:34 浏览:14 分类:玩电脑
PowerShell ForEach 循环、ForEach-Object Cmdlet - 初学者指南
作为 PowerShell 用户,您可能熟悉 foreach
循环。如果您想掌握脚本编写的艺术并最大限度地提高脚本编写效率,则必须了解此循环的工作原理以及何时在脚本中使用它。 PowerShell 的 ForEach
循环和 ForEach-Object
cmdlet 允许您迭代对象集合并对集合中的每个项目执行特定操作。在本文中,我们将了解如何使用这些 cmdlet 来处理对象集合,并在此过程中演示一些实际示例。
PowerShell ForEach 循环
PowerShell 中的 ForEach
循环允许您迭代对象集合,例如数组、文件列表、一组用户帐户或项目列表。 ForEach
cmdlet 的语法如下:
ForEach (item in collection) {
# code to execute on each item
}
以下是如何在 PowerShell 中使用 ForEach 循环来迭代数组元素的示例:
$items = 1,2,3,4,5
ForEach ($item in $items)
{
Write-Host "Item: $item"
}
此循环迭代数字数组(循环内的代码块 - 大括号之间的语句)在循环的每次迭代中执行)并将每个数字打印到控制台。这将输出以下内容:
Item: 1
Item: 2
Item: 3
Item: 4
Item: 5
您还可以使用 ForEach 循环来迭代对象的属性:
#Object
$Employee = [pscustomobject] @{
Name = "Shan Mathew"
Designation = "IT Manager"
Country = "United States"
}
#Get All Properties of the Object
Foreach ($Property in $Employee.PSObject.Properties)
{
Write-Host "$($Property.Name): $($Property.Value)"
}
这将输出以下内容:
Name: Shan Mathew
Designation: IT Manager
Country: United States
您还可以使用 ForEach
循环对对象列表中的每个项目(例如文件或文件夹)执行操作。例如:
#Get All Files from a Folder
$Files = Get-ChildItem "C:\Temp" | Where { !$_.PSIsContainer }
#Print Each File Name in the Console
ForEach ($File in $Files) {
Write-host $File.Name
}
在此示例中,Get-ChildItem
cmdlet 用于获取 C:\Temp
目录中所有文件的列表,ForEach
循环遍历文件列表并将每个文件的名称打印到控制台。
PowerShell ForEach-Object cmdlet
ForEach-Object
cmdlet 是一个允许您对对象集合中的每个对象执行操作的 cmdlet。与 ForEach
语句不同,它使用管道作为其输入。 ForEach-Object
cmdlet 的语法如下:
<input> | ForEach-Object {
# code to execute on each item
}
PowerShell 1..10 ForEach
以下是使用 ForEach-Object
循环 1 到 10 之间的数字的示例:
#Loop between 1 to 10 numbers
1..10 | ForEach-Object {
Write-host $_
}
这会在屏幕上打印 1 到 10 之间的数字。 ForEach-Object 通常与 Where-Object
cmdlet 结合使用,以在执行操作之前过滤集合中的对象。 ForEach-Object 可与任何类型的对象一起使用,包括数组、列表、字符串等。以下是一些示例:
- 获取目录中所有项目的列表 -
Get-ChildItem -Path "C:\Temp" | ForEach-Object { $_.Name }
- 获取计算机上运行的所有进程的列表 -
Get-Process | ForEach-Object { $_.ProcessName }
- 将列表中的所有字符串转换为大写 -
"One", "Two", "Three" | ForEach-Object { $_.ToUpper() }
带有 -Begin 和 -End 参数的 ForEach-Object
-Begin
和 -End
参数允许您分别指定在集合迭代之前和之后执行的脚本块。例如,让我们遍历文件夹中的每个文件:
Get-ChildItem "C:\Temp" | Where { !$_.PSIsContainer } | ForEach-Object {
Write-Host "Processing file $($_.Name)"
} -Begin {
Write-Host "Start processing files"
} -End {
Write-Host "Finished processing files"
}
在此示例中,使用 -Begin
参数指定的脚本块在迭代开始之前执行,使用 -End
参数指定的脚本块在迭代结束后执行。完全的。
您还可以使用 ForEach
循环对对象列表中的每个项目(例如文件或文件夹)执行操作。例如:
ForEach 循环与。 PowerShell 中的 ForEach-Object cmdlet
在 PowerShell 中,ForEach 循环和 ForEach-Object cmdlet 都用于迭代对象集合,但它们的工作方式略有不同。当您将 ForEach 语句放在行的开头时(例如,ForEach ($item in $items) {}),它是一个传统的循环构造,允许您为数组或集合中的每个元素执行代码块。
另一方面,ForEach-Object
cmdlet 是一个旨在与 PowerShell 管道配合使用的 cmdlet。它从管道获取输入,对每个对象执行操作,并将结果沿着管道传递。以下是使用 ForEach-Object
cmdlet 的示例:(例如,Get-ChildItem | ForEach-Object { Write-Host $_.Name })。 ForEach 关键字也可以通过管道传输,因为它也是 ForEach-Object 的别名。但反过来是不可能的!
PowerShell ForEach 与 ForEach-Object:使用哪一个?
现在我们已经介绍了 foreach
和 foreach-object
之间的异同,您可能想知道在 PowerShell 脚本中使用哪一个。答案取决于您的具体场景和要求。
如果您已经有了一个对象集合并且只需要迭代它们,那么 foreach
可能是最佳选择。如果您正在使用管道输入或需要更灵活地处理输入,foreach-object
可能是更好的选择。
在 PowerShell 中中断 ForEach 循环和 ForEach-Object cmdlet
break
关键字可用于在 PowerShell 中提前退出 ForEach
或 ForEach-Object
循环。
如何在 PowerShell 中打破 ForEach 循环?
ForEach 语句允许您迭代项目集合并对每个项目执行操作。但如果您需要尽早跳出循环怎么办?要在 PowerShell 中尽早退出 foreach
循环,可以使用 break
关键字。这是一个例子:
$Array = 1..10
Foreach($Val in $Array){
#Stop at 5
if($val -eq 5){
break
}
Write-Host "Value: $val"
}
输出 :
Value: 1
Value: 2
Value: 3
Value: 4
在上面的示例中,foreach
循环将迭代 $array
数组的元素。当循环到达值为5的元素时,会遇到break
关键字,导致循环立即退出。
中断 ForEach-Object cmdlet 迭代
要在 PowerShell 中打破 ForEach-Object
循环,可以使用 break
关键字。 break
关键字立即退出循环并在循环后继续执行脚本。以下是在 ForEach-Object
循环中使用 break
的示例:
#Get All running processes
$Processes = Get-Process
$Counter = 1
#Iterate through each process
$Processes | ForEach-Object {
Write-host "Processing Item $Counter of $($Processes.count)"
if ($_.Name -eq "notepad") {
Write-Host "Found Notepad process and exiting from the Loop!"
break
}
$Counter++
}
Write-Host "Finished processing processes"
在此示例中,脚本使用 Get-Process
获取进程列表,并使用 ForEach-Object
迭代每个进程。如果进程的名称是“notepad”,则会显示一条消息,并使用 break
关键字退出循环。然后脚本在循环后继续执行。
在 PowerShell ForEach 循环中继续
continue
关键字可跳过循环中的当前元素并继续循环的下一次迭代。例如:
#PowerShell ForEach 1..10
$Array = 1..10
Foreach($Val in $Array){
#Skip 5
if($val -eq 5){
Continue
}
Write-Host "Value: $val"
}
输出 :
Value: 1
Value: 2
Value: 3
Value: 4
Value: 6
Value: 7
Value: 8
Value: 9
Value: 10
在上面的示例中,foreach
循环将迭代 $array
数组的元素。当循环到达值为 5 的元素时,将遇到 continue 关键字,导致循环跳过当前迭代的剩余部分并继续进行下一次迭代。
在 ForEach-Object cmdlet 中继续
但是,当您在 ForEach-Object cmdlet 中使用 break 或 continue 时,整个循环将终止,而不是跳过当前迭代。您必须使用“返回”而不是“继续”。
#Loop between 1 to 10 numbers
1..10 | ForEach-Object {
if ($_ -eq 5) {
return
}
Write-host $_
}
输出 :
Value: 1
Value: 2
Value: 3
Value: 4
Value: 6
Value: 7
Value: 8
Value: 9
Value: 10
结论
正如您所看到的,ForEach 循环和 ForEach-Object cmdlet 对于处理对象集合非常有用,它们允许您迭代每个对象并对其执行操作。在本文中,我们探讨了 PowerShell foreach
的细节,包括它的工作原理、使用它的最佳实践,以及使用这种强大的结构编写高效脚本的提示和技巧。通过在 PowerShell 脚本中使用它们,您可以高效地对大型对象集合执行复杂的操作。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag