问题描述
我在一家教育机构工作,并且编写了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 (将#修改为@)