C# 将用户添加到活动目录

本文关键字:活动 添加 用户 | 更新日期: 2023-09-27 17:57:20

我正在尝试将用户添加到活动目录,到目前为止我的代码是

using (DirectoryEntry dirEntry = new DirectoryEntry(ldapPath))
    if (dirEntry.SchemaEntry.Name == "container")
    {
        using (DirectoryEntry newUser = dirEntry.Children.Add("CN= " + username, "User"))
        {
            fullname = fname + " " + lname;
            newUser.Properties["sAMAccountName"].Value = username;
            newUser.Properties["First name"].Value = fname;
            newUser.Properties["Last name"].Value = lname;
            newUser.Properties["Full name"].Value = fullname;
            newUser.Properties["password"].Value = password;
            newUser.CommitChanges();
        }
    }

当我运行程序时,出现错误

指定的目录服务属性或值不存在。

关于如何完成这项工作的任何建议?是的,我是活动目录相关内容的新手。

C# 将用户添加到活动目录

Active Directory 属性需要通过其 LDAP 名称进行寻址 - 而不是您在 GUI 中看到的名称。

所以试试这个:

using (DirectoryEntry dirEntry = new DirectoryEntry(ldapPath))
{
    if (dirEntry.SchemaEntry.Name == "container")
    {
        using (DirectoryEntry newUser = dirEntry.Children.Add("CN=" + username, "User"))
        {
             fullname = fname + " " + lname;
             newUser.Properties["sAMAccountName"].Value = username;
             newUser.Properties["givenName"].Value = fname;  // first name
             newUser.Properties["sn"].Value = lname;    // surname = last name
             newUser.Properties["displayName"].Value = fullname;  
             newUser.Properties["password"].Value = password;
             newUser.CommitChanges();
         }
    }
}

您可以在Richard Mueller的网站上找到一个很棒的Excel电子表格,其中显示了交互式GUI中使用的名称,以及它们映射到的LDAP名称(查看"所有Active Directory属性的电子表格"和"Active Directory用户和计算机MMC中的用户属性电子表格"。

或者,如果您使用的是 .NET 3.5 或更高版本,还可以调查新的 System.DirectoryServices.AccountManagement 命名空间,它允许你使用形状漂亮的对象来处理常见任务。

您的代码如下所示:

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, NULL, ldapPath)
{
    // create a user principal object
    UserPrincipal user = new UserPrincipal(ctx, username, password, true);
    // assign some properties to the user principal
    user.GivenName = fname;
    user.Surname = lname;
    user.DisplayName = fullname;
    // save the user to the directory
    user.Save();
}

注意ldapPath应该是容器的 LDAP 路径 - 没有任何前缀,例如 CN=Users,DC=YourCompany,DC=com 之类的前缀 - 没有LDAP://或其他前缀。

好处是:UserPrincipal对象类已经包含漂亮的、强类型和更直观的属性来处理许多基本任务,例如创建新用户和设置其某些属性。