C#-将用户批量添加到广告组的问题

问题描述

我在一家教育机构工作,并且编写了C#程序,为我们的学生大量创建了20000个AD帐户。该程序将创建AD帐户,然后再次对其进行遍历以将其添加到适当的安全组,然后为其创建本地驱动器。当我仅处理少量帐户(例如100个或更少)时,这似乎工作正常。但是,我的组织有超过20000个帐户,每年在新学年开始之前都需要批量创建。

当我尝试使用要创建的多个帐户运行该程序时,创建帐户就很好了。但是,当它尝试将它们添加到AD组时,有一些帐户会放入适当的组,但很多帐户却没有。最终只能放入认的“域用户”组。我认为这是网络延迟或域控制器处理速度的问题,但我不确定。

无论编程/脚本语言如何,在批量创建AD帐户时,是否还有其他人遇到过这种情况?

更新: 这是我将用户添加到组中的代码片段:

静态void AddUsersToGroups(列出学生) {

        Console.WriteLine("Inside AddUserToGroups()");

        try
        {
            using (PrincipalContext pc = new PrincipalContext(ContextType.Domain,"<DOMAIN NAME GOES HERE BUT TAKEN OUT FOR THIS POST>"))
            {
                try
                {                    
                    foreach(StudentData sd in students)
                    {
                
                        if (sd.SecurityGroups.Count > 0)
                        {
                            foreach (string grp in sd.SecurityGroups)
                            {
                                try
                                {
                                    GroupPrincipal secGrp = GroupPrincipal.FindByIdentity(pc,grp.Trim());
                                    
                                    if (secGrp.Name.Equals(grp.Trim()) && secGrp.Name != null)
                                    {
                                        secGrp.Members.Add(pc,IdentityType.UserPrincipalName,sd.UPN.Trim());
                                        secGrp.Save();
                                        
                                    }
                                    secGrp.dispose();
                                }
                                catch (Exception ex)
                                {
                                    ErrorLog el = new ErrorLog(ex,userName,region);
                                    el.InsertErrorLog(el,region);
                                }
                            }
                        }

                        if (sd.MapDriveGroup != "")
                        {
                            GroupPrincipal mapDrive = GroupPrincipal.FindByIdentity(pc,sd.MapDriveGroup.Trim());
                            
                            if (mapDrive.Name.Equals(sd.MapDriveGroup.Trim()) && mapDrive.Name != null)
                            {
                                Console.WriteLine("MapDrive Group= " + sd.MapDriveGroup.Trim() + " " + mapDrive.Name);
                                mapDrive.Members.Add(pc,sd.UPN.Trim());
                                mapDrive.Save();
                                
                            }
                            mapDrive.dispose();

                        }

                        if (sd.PasswordGroup != "")
                        {
                            GroupPrincipal pwdGroup = GroupPrincipal.FindByIdentity(pc,sd.PasswordGroup.Trim());
                           
                            if (pwdGroup.Name.Equals(sd.PasswordGroup.Trim()) && pwdGroup.Name != null)
                            {
                                pwdGroup.Members.Add(pc,sd.UPN.Trim());
                                pwdGroup.Save();
                               

                            }
                            pwdGroup.dispose();
                        }

                        if (sd.browserGroup != "")
                        {
                            GroupPrincipal browserGroup = GroupPrincipal.FindByIdentity(pc,sd.browserGroup.Trim());
                            
                            if (browserGroup.Name.Equals(sd.browserGroup.Trim()) && browserGroup.Name != null)
                            {
                                browserGroup.Members.Add(pc,sd.UPN.Trim());
                                browserGroup.Save();
                               
                            }
                            browserGroup.dispose();
                        }
                       

                    }
                }
                catch (Exception ex)
                {
                    ErrorLog el = new ErrorLog(ex,region);
                    el.InsertErrorLog(el,region);
                }

            }
        }
        catch (Exception ex)
        {
            ErrorLog el = new ErrorLog(ex,region);
            el.InsertErrorLog(el,region);
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)