用户创建后,将用户添加到AD安全组失败

时间:2010-03-08 19:41:32

标签: c# active-directory directoryservices

我正在使用WCF服务向我们的服务台员工公开某些Active Directory管理功能,而不向他们提供直接操作AD所需的组成员身份。向用户添加用户和从组中删除用户就像现有用户的冠军一样,但每次创建新用户时,它都会抛出这个有趣的代码:

The server is unwilling to process the request. (Exception from HRESULT: 0x80072035)

我用来将用户添加到群组的代码是

    public bool AddGroupToUser(string userDn, string groupDn)
    {
        try
        {
            DirectoryEntry groupEntry = LdapTools.GetDirectoryEntry(groupDn);
            groupEntry.Properties["member"].Add(userDn);
            groupEntry.CommitChanges();
            groupEntry.Close();
            return true;
        }
        catch (DirectoryServicesCOMException)
        {
            return false;
        }
    }

我读过的关于这个主题的一切都很模糊,我似乎无法找出为什么异常被触发。有什么想法吗?

更新

这是我用来在AD中创建用户的代码:

        try
        {
            DirectoryEntry container = GetDirectoryEntry(storageOu);
            DirectoryEntry newUser = container.Children.Add("CN=" + employee.FullName, "user");
            newUser.Properties["sAMAccountName"].Value = employee.Username;
            newUser.Properties["displayName"].Value = employee.FullName;
            newUser.Properties["givenName"].Value = employee.FirstName;
            newUser.Properties["sn"].Value = employee.LastName;
            newUser.Properties["department"].Value = departmentName;
            newUser.Properties["userPrincipalName"].Value = employee.Username + "@APEX.Local";
            newUser.CommitChanges();

            newUser.Invoke("SetPassword", new object[] { employee.Password });
            newUser.CommitChanges();

            AdsUserFlags userSettings = AdsUserFlags.NormalAccount;
            newUser.Properties["userAccountControl"].Value = userSettings;
            newUser.CommitChanges();

            ldapPath = newUser.Path;

            newUser.Close();
            container.Close();
        }
        catch (DirectoryServicesCOMException e)
        {
            // Something went wrong... what???
        }
        catch (Exception e)
        {
            // Something else went wrong
        }

新用户可以登录,并可以使用标准MS工具进行操作。

4 个答案:

答案 0 :(得分:2)

显然,除非我在这里错过重要的一步,否则问题就是时间。在尝试将组添加到新用户之前强制系统休眠8秒时,该过程可以正常工作。如果我在8秒标记之前完成它就会失败。

除非有人能为我提供更好的解决方案,否则我认为这个答案是正确的。

答案 1 :(得分:1)

尝试:

 public bool  AddUserToGroup(string userName, string groupName)

        {

            bool done = false;

            GroupPrincipal group = GroupPrincipal.FindByIdentity(context, groupName);

            if (group == null)

            {

                group = new GroupPrincipal(context, groupName);

            }

            UserPrincipal user = UserPrincipal.FindByIdentity(context, userName);

            if (user != null & group != null)

            {

                group.Members.Add(user);

                group.Save();

                done = (user.IsMemberOf(group));

            }

            return done;

        }

参考:
http://www.c-sharpcorner.com/UploadFile/dhananjaycoder/activedirectoryoperations11132009113015AM/activedirectoryoperations.aspx

答案 2 :(得分:0)

here中所述,您能否告诉我们您设置新创建用户的密码?在参考文献中,它表示在使用它之前你应该使用SetPassword。

答案 3 :(得分:0)

Active Directory复制问题可能会出现时间问题。

有一次,我向我的客户提供了一个产品,该产品通过Active Directory创建用户,其中包含超过10,000条记录,其中包含SharePoint表单上的给定信息,然后程序将用户添加到SharePoint组。问题是,SharePoint抛出了关于新创建的用户的错误,它说用户在AD中不存在。

因此,系统工程师之一向我们讲述了Active Directory上的复制操作,它可能是问题的根源,而且确实如此。

对于解决方案,程序尝试在1秒睡眠时完成10次工作。到目前为止没有问题。因此,作为解决方案,我建议您查看AD是否存在复制方法。

P.S:当我向客户系统工程师询问有关复制操作的问题时,他们都拒绝了AD复制操作的存在,并告诉我程序存在问题。他们相信我,当我们从计算机在AD中创建新用户时,我们在另一台计算机上看不到用户5秒钟。