powershell - 如何限制 ForEach 运行的次数
问题描述
我正在尝试使用 CSV 文件删除 Exchange 联系人,但是,如果该列表超过 25 个用户,我希望此脚本停止,甚至永远不会启动。
$RemoveContacts = Import_CSV ".\Removed Contacts_$((Get-Date).ToString('MMddyyyy')).csv"
$RemoveContacts | ForEach { Remove-MailContact -identity $_ -confirm:$false}
实现这一目标的最佳方法是什么?
解决方案
如果数组有超过 25 个用户,您甚至不想开始处理:$RemoveContacts
if ($RemoveContacts.Count -gt 25) {
Write-Error "Too many contacts: $($RemoveContacts.Count)"
return
}
Write-Error
创建一个非终止错误并return
退出脚本/函数。请注意,如果适用,默认情况下会继续处理。
要中止处理,请使用Throw
而不是Write-Error
.
如果您最多要处理 25 个元素:
Select-Object -First <n>
<n>
允许您在收到第一个对象后停止处理:
$RemoveContacts | Select-Object -First 25 | ForEach { Remove-MailContact -identity $_ -confirm:$false }
Select-Object -First
是在管道中使用的正确工具。
但是,由于您已经将所有对象加载到内存中的数组中,您可以更简单且更有效地使用数组切片:
$RemoveContacts[0..24] | ForEach { Remove-MailContact -identity $_ -confirm:$false }
[0..24]
从 array 中提取前 25 个元素$RemoveContacts
,即使数组包含的元素少于此,也可以安全使用。[1]
在 PSv4+ 中,您可以通过使用处理每个数组元素的.ForEach()
方法来进一步加快速度:
$RemoveContacts[0..24].ForEach({ Remove-MailContact -identity $_ -confirm:$false })
[1] 除非你刻意激活或更高。Set-StrictMode
-Version 3
推荐阅读
- debugging - 模拟器中的 Apple Id 登录授权
- c - linux中的参数到argv
- firebase - 错误状态:DocumentSnapshotPlatform 中不存在字段
- python - 如何通过虚拟相机将 OpenCV 视频源发送到 Python?
- azure-functions - Azure Functions 有哪些选项可以使用额外的硬盘驱动器?
- reactjs - 如何在同一行设置段落、按钮和文本框?
- database - 如何在 Docker 中将 mg_client 连接到容器外?
- amazon-web-services - 如何在 AWS Educate 中检查正在运行的资源
- shell - bash:通过grep匹配单引号和双引号
- symfony - Twig 扩展 Symfony5:为每个控制器创建一个带有 SearchBar 的 NavBar