使用C#中的密码创建Active Directory用户

Raj*_*enK 23 .net c# active-directory

我正在寻找一种方法来创建Active Directory用户并设置他们的密码,最好不要给我的应用程序/服务域管理员权限.

我尝试过以下方法:

DirectoryEntry newUser = _directoryEntry.Children.Add("CN=" + fullname, USER);
newUser.Properties["samAccountName"].Value = username;
newUser.Properties["userPassword"].Value = password;
newUser.Properties["mail"].Value = email;
newUser.CommitChanges();
Run Code Online (Sandbox Code Playgroud)

用户已创建,但似乎从未在用户上设置密码.

有没有人知道如何在创建用户时最初设置用户密码?我知道

.Invoke("SetPassword", new object[] { password })
Run Code Online (Sandbox Code Playgroud)

但这需要我的代码以域管理员权限运行.因为我没有真正看到授予我的代码域管理员权限的重点,只是设置初始密码(我也允许用户密码重置,但那些在特定用户的上下文中运行),我希望有人聪明解决方案,不要求我这样做.

提前致谢!

Nic*_*ver 35

现在使用System.DirectoryServices.AccountManagement可以更轻松地完成整个过程(只要你在.Net 3.5上):

请参阅此处了解完整的纲要

以下是您具体案例的简要示例:

using(var pc = new PrincipalContext(ContextType.Domain))
{
  using(var up = new UserPrincipal(pc))
  {
    up.SamAccountName = username;
    up.EmailAddress = email;
    up.SetPassword(password);
    up.Enabled = true;
    up.ExpirePasswordNow();
    up.Save();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 完成后不要忘记处理上下文和主要对象.最好用`pc`和`up`上的`using`语句来完成. (4认同)

kom*_*bsh 5

是的,也可以使用下面的代码来创建批量用户

DirectoryEntry ouEntry = new DirectoryEntry("LDAP://OU=TestOU,DC=TestDomain,DC=local");

for (int i = 0; i < 10; i++)
{
    try
    {
        DirectoryEntry childEntry = ouEntry.Children.Add("CN=TestUser" + i,  "user");
        childEntry.CommitChanges();
        ouEntry.CommitChanges();
        childEntry.Invoke("SetPassword", new object[] { "password" });
        childEntry.CommitChanges();
    }
    catch (Exception ex)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)