【问题标题】: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 总是会有点慢。

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2019-02-02
      • 2015-12-14
      • 2014-06-08
      • 1970-01-01
      • 2021-05-28
      • 2015-07-12
      • 1970-01-01
      相关资源
      最近更新 更多