it-swarm.com.de

Active Directory-Benutzer mit Kennwort in C # erstellen

Ich bin auf der Suche nach einer Möglichkeit, Active Directory-Benutzer zu erstellen und deren Kennwort festzulegen, vorzugsweise ohne meine Administratorrechte für Anwendungen/Dienste zu vergeben.

Ich habe folgendes versucht:

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

Der Benutzer wurde erstellt, aber es scheint, dass das Kennwort niemals für den Benutzer festgelegt wurde.

Hat jemand eine Idee, wie das Benutzerpasswort beim Erstellen des Benutzers festgelegt wird? ich weiss Bescheid

.Invoke("SetPassword", new object[] { password })

Dafür muss mein Code jedoch mit Domain-Admin-Berechtigungen ausgeführt werden. Da ich nicht wirklich den Punkt sehe, um meinen Code Domain-Admin-Berechtigungen zu gewähren, nur um das Anfangspasswort festzulegen (ich lasse auch das Zurücksetzen von Benutzerpasswörtern zu, aber diese werden im Kontext dieses bestimmten Benutzers ausgeführt), hoffe ich, dass jemand einen Schlauen hat Lösung, die mich nicht dazu zwingt.

Danke im Voraus!

21
RajenK

Sie können diesen gesamten Prozess jetzt mit System.DirectoryServices.AccountManagement viel einfacher durchführen (solange Sie auf .Net 3.5 sind):

Siehe hier für einen vollständigen Überblick

Hier ist ein kurzes Beispiel für Ihren speziellen Fall:

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();
  }
}
31
Nick Craver

Ich würde den Code von @ Nick verwenden (in using-Anweisungen eingeschlossen, damit der Kontext und der Principal ordnungsgemäß entsorgt werden). Für Privilegien müssen Sie mindestens über ausreichende Privilegien in der Organisationseinheit verfügen, in der Sie den Benutzer erstellen, um Objekte zu erstellen und zu verwalten. Ich würde einen bestimmten Benutzer erstellen, unter dem Ihr Programm ausgeführt wird, und ihm nur die erforderlichen Berechtigungen erteilen, um die Aufgaben auszuführen, die in dieser bestimmten Organisationseinheit benötigt werden, und nicht mehr.

4
tvanfosson

Ja kann auch den folgenden Code verwenden, um einen Großteil der Benutzer zu erstellen

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)
    {
    }
}
4
kombsh

Versuchen Sie es mit diesem Code.

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)
    {

    }
}
0
Munna