由于“服务器上没有此类对象”错误,无法将用户添加到 Active Directory

问题描述 投票:0回答:2

我想使用 C# 从我的计算机将用户添加到 Active Directory。 Active Directory 安装在本地 IP 地址为 10.1.1.5 的服务器上。登录的用户名和密码分别为“Administrator”和“Pass12345678”。我创建了一个名为 Guest 的 OU。

这是我添加用户的代码:

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 shows an 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();

    }
}

当我单击“确定”按钮时,它显示此错误:

System.DirectoryServices.DirectoryServicesCOMException:'服务器上没有这样的对象。 '

在行

if(adUserFolder.SchemaEntry.Name == "容器")

如何解决?

c# active-directory
2个回答
1
投票

DirectoryEntry
构造函数永远不会抛出异常。在您开始使用它之前,它实际上并没有连接到 AD。由于该线路是您第一次使用
adUserFolder
,因此它是第一次连接到 AD 的时候。

该错误的含义如下:不存在

distinguishedName
CN=Users,OU=Guest,DC=myhome,DC=com
的对象。

你确定你说得对吗?您似乎正在寻找名为

Users
的 OU 内名为
Guest
的容器。这就是你想要做的吗?

Users
是容器还是OU?

您可以使用 AD 用户和计算机来确认

distinguishedName
:导航到所需的对象 -> 右键单击 -> '属性' -> 属性编辑器选项卡并查看
distinguishedName
属性。


0
投票

为了在活动目录中创建用户对象,我始终使用 UserPrincipals 而不是 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"
© www.soinside.com 2019 - 2024. All rights reserved.