C#无法将用户添加到Active Directory。它显示错误服务器上没有这样的对象

C#无法将用户添加到Active Directory。它显示错误服务器上没有这样的对象,c#,active-directory,C#,Active Directory,我想使用C#将用户从我的计算机添加到Active Directory。 在服务器10.1.1.5中安装AD 登录AD的用户名和密码为“管理员”,“密码12345678”。 我在广告上创建了你的名字Guest 这是我将用户添加到广告的代码 private void Btn_ok_Click(object sender, EventArgs e) { UserInfo newUserInfo; newUserInfo.firstName

我想使用C#将用户从我的计算机添加到Active Directory。 在服务器10.1.1.5中安装AD 登录AD的用户名和密码为“管理员”,“密码12345678”。 我在广告上创建了你的名字Guest

这是我将用户添加到广告的代码

private void Btn_ok_Click(object sender, EventArgs e)
        {
            UserInfo newUserInfo;
            newUserInfo.firstName = "TestName" ;
            newUserInfo.lastName = "TestLastName";
            newUserInfo.displayName = "TestName Lastname";

            newUserInfo.username = "TestName.t";
            newUserInfo.sAMAccountName = "TestName.t";

            DirectoryEntry adUserFolder = new DirectoryEntry("LDAP://10.1.1.5/CN=Users,OU=Guest,DC=myhome,DC=com", "Administrator", "Pass12345678");

/******** It show error this line **********/

            if(adUserFolder.SchemaEntry.Name == "container")
            {
                DirectoryEntry newUser = adUserFolder.Children.Add("CN=" + newUserInfo.username, "User");

                if (DirectoryEntry.Exists(newUser.Path))
                {
                    //Remove exist user
                    adUserFolder.Children.Remove(new DirectoryEntry(newUser.Path));

                 }

                newUser.Properties["sAMAccountName"].Value = newUserInfo.sAMAccountName;
                newUser.Properties["givenName"].Value = newUserInfo.firstName;
                newUser.Properties["sn"].Value = newUserInfo.lastName;
                newUser.Properties["displayName"].Value = newUserInfo.displayName;

                newUser.CommitChanges();
                newUser.Invoke("setpassword", "Test123456");

                newUser.CommitChanges();

            }
        }
当我点击OK按钮时,它显示错误

System.DirectoryServices.DirectoryServicesCOMException:'没有 服务器上的此类对象。”

排队

if(adUserFolder.SchemaEntry.Name==“容器”)


如何修复它?

在active directory中创建用户对象时,我一直使用UserPrinciples,而不是DirectoryEntries:

public void create(string lanid, string new_password, string container)
    {
        using (UserPrincipal new_user = new UserPrincipal(new PrincipalContext(ContextType.Domain, this.domain_string, container)))

        {
            new_user.SamAccountName = lanid;
            new_user.SetPassword(new_password);
            new_user.Enabled = true;
            new_user.Save();
        }
    }
在该示例中,“容器”类似于:

"OU=container,OU=container,OU=container,OU=container,DC=domain,DC=domain,DC=domain";
至于DirectoryEntries的原始错误,我将逐步检查它,看看对象是否实际设置为任何值:

字符串:

"LDAP://10.1.1.5/CN=Users,OU=Guest,DC=myhome,DC=com"
在我看来不太合适

"LDAP://CN=10.1.1.5,CN=Users,OU=Guest,DC=myhome,DC=com"

可能会工作…

DirectoryEntry构造函数永远不会引发异常。直到你开始使用它,它才真正连接到广告。由于该行是您第一次使用
adUserFolder
,因此它第一次连接到AD

该错误的意思是:没有对象的
区分名称为
CN=Users、OU=Guest、DC=myhome、DC=com

你确定你是对的吗?似乎您正在一个名为
Guest
的OU内部寻找一个名为
Users
的容器。这就是你想做的吗

Users
是容器还是OU


您可以使用AD用户和计算机确认
DifferentizedName
:导航到所需对象->右键单击->“属性”->“属性编辑器”选项卡并查看
DifferentizedName
属性。

LDAP字符串正常。您可以使用该格式指定要连接到的服务器。如果从中连接的计算机已加入域(除非您希望以特定DC为目标),则没有必要这样做,但如果您是从域外连接,则有必要这样做。