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();
}
}
当我运行程序时,出现错误
指定的目录服务属性或值不存在。
关于如何完成这项工作的任何建议?是的,我是活动目录相关内容的新手。
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
对象类已经包含漂亮的、强类型和更直观的属性来处理许多基本任务,例如创建新用户和设置其某些属性。