【问题标题】:More efficient foreach-object loop in Set-MailboxFolderPersission?Set-MailboxFolderPersission 中更有效的 foreach-object 循环?
【发布时间】:2014-08-01 10:47:17
【问题描述】:
我编写了这个脚本,它将组中每个人的 Exchange 日历审阅者权限应用到该组中的其他人。它有效,但它有点慢。我想知道是否有人可以建议提高循环的效率?
$ADgroup = Get-ADGroupMember -Identity "My Group"
$ADgroup | foreach-object
{
$mb = Get-Mailbox -identity $_.SamAccountName
foreach ($person in $ADgroup)
{if ($person.objectGUID -ne $mb.Guid)
{
$name = $person.SamAccountName
Add-MailboxFolderPermission -Identity "${name}:\Calendar" -User $mb.Alias -AccessRights Reviewer
}
}
}
提前致谢
【问题讨论】:
标签:
powershell
exchange-server
powershell-3.0
【解决方案1】:
如果您有用于 Powershell Workflow 的 requirements,您可以使用它来并行运行任务(即内部 foreach)。还有jobs,不过比较麻烦。
不过,要从中受益,您可能必须将逻辑重组为:
workflow {
param($samsToAdd)
foreach -parallel($samToAdd in $samsToAdd) {
sequence{
$name = $samToAdd.name
$mb = $samToAdd.mb
Add-MailboxFolderPermission -Identity "${name}:\Calendar" -User $mb.Alias -AccessRights Reviewer
}
}
}
}
$ADgroup = Get-ADGroupMember -Identity "My Group"
$samsToAdd = @()
$ADgroup | foreach-object
{
$mb = Get-Mailbox -identity $_.SamAccountName
foreach ($person in $ADgroup)
{if ($person.objectGUID -ne $mb.Guid)
{
$name = $person.SamAccountName
$samsToAdd += new-object psobject -property @{
name = $name
mb = $mb
}
}
}
}
我还要评论说,基于迭代性质,添加的权限有点慢。所以,并行操作只会让你受益匪浅,但 IMO 总是会有点慢。