加快将用户添加到组

时间:2015-08-11 19:21:11

标签: powershell active-directory powershell-v3.0

目前我们有一个脚本,可以将100个用户添加到100个不同的组中。这样就可以处理10.000'行代码。

对于我们所做的每一行:

Try {
  add-adgroupmember -identity "CN=...." -Members "CN=..."
} catch {
  Add-content ...
}

如果脚本相当小,那么这不是问题。但是如果你必须授予100.000组成员资格,这将花费很多时间。我已经使用了将用户数组添加到组的方法。这样做的速度要快得多,但当1个用户发出错误或者其中一个错误时,您只会收到1条错误消息。并且为了确定知道哪一个,您需要遍历这些用户以检查哪个不在组中。

有没有办法加快这个过程?

2 个答案:

答案 0 :(得分:0)

直接使用AD的.net类而不是AD cmdlet应该更快,特别是在System.DirectoryServices.AccountManagement命名空间下找到的那些应该可以很快地工作。

作为替代方案,您可以尝试并行运行“添加”(通过工作流程或作业)。

答案 1 :(得分:0)

此方案中最可能出现的错误是:

  1. 用户未存在或已停用/已重命名
  2. 用户已经是其中一个群组的成员
  3. 这些很容易解决:

    # List of Users
    $Users  = "John01","Joe02","Kyle45"
    # List of groups we want to make them members of
    $Groups = "Finance Users","Accountants"
    
    # Remove all users that don't exist or are disabled
    $Users = $Users |Where-Object { try {
            Get-ADUser -Filter "Enabled -eq $true -and SAMAccountName -eq $_" -ErrorAction Stop
            $true
        } catch { $false } }
    
    
    foreach($Group in $Groups){
        # Check if any of the users are already members of the group
        $CurrentGroupMembers = Get-ADGroupMember -Identity $Group | Select-Object -ExpandProperty SAMAccountName
        $NewMembers = $Users |Where-Object { $CurrentGroupMembers -notcontains $_ }
    
        # Add the remaining users to the group all at once
        Add-ADGroupMember -Identity $Group -Members $NewMembers
    }
    

    现在我们已经将10.000个LDAP请求减少到最多300个(yay)