如何限制ForEach运行的次数

时间:2018-10-03 20:10:51

标签: powershell foreach break

我正在尝试使用CSV文件删除Exchange联系人,但是,如果该列表超过25个用户,我希望此脚本停止甚至不启动。

$RemoveContacts = Import_CSV ".\Removed Contacts_$((Get-Date).ToString('MMddyyyy')).csv"
$RemoveContacts | ForEach { Remove-MailContact -identity $_ -confirm:$false}

实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您甚至不想开始处理,如果数组$RemoveContacts的用户超过25个:

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]从数组$RemoveContacts中提取前25个元素,即使该数组包含的元素少于该元素,也可以安全使用。

在PSv4 +中,您可以使用.ForEach() 方法处理每个数组元素来进一步加快速度:

$RemoveContacts[0..24].ForEach({ Remove-MailContact -identity $_ -confirm:$false })