2010-02-21 34 views
18

Szukam sposobu na utworzenie użytkowników usługi Active Directory i ustawienie ich hasła, najlepiej bez przyznawania uprawnień administratora domeny aplikacji/usługi.Tworzenie użytkownika usługi Active Directory z hasłem w języku C#

Próbowałem następujące:

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

Użytkownik jest tworzony, ale wydaje się, że hasło nie jest ustawione na użytkownika.

Czy ktoś ma pomysł, jak ustawić hasło użytkownika początkowo podczas tworzenia użytkownika? Wiem o

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

Ale to wymaga mojego kodu do uruchomienia z uprawnieniami administratora domeny. Ponieważ tak naprawdę nie widzę sensu, by przyznać mój kod Uprawnienia administratora domeny, aby ustawić początkowe hasło (pozwalam również na resetowanie hasła użytkownika, ale te uruchamiane w kontekście tego konkretnego użytkownika), mam nadzieję, że ktoś ma sprytnego rozwiązanie, które tego nie wymaga.

Z góry dziękuję!

+0

To jedyna opcja, jaką mieliśmy, założę się, że jesteś w tej samej łodzi, ale pod warunkiem, że masz 3,5 alternatywy poniżej, w przypadku, gdy jest to opcja. Mam 1/4 kodu w stosunku do stylu 'DirectoryEntry', który był jedyną opcją, ** polecam nadać nowej przestrzeni nazw wygląd. –

Odpowiedz

25

Można zrobić cały ten proces znacznie łatwiejsze teraz z System.DirectoryServices.AccountManagement (długo jak jesteś na .NET 3.5):

See here for a full rundown

Oto krótki przykład konkretnego przypadku:

+3

Nie zapomnij wyrzucić obiektów kontekstowych i zasadniczych, gdy skończysz. Najlepiej zrobić to za pomocą instrukcji 'using' na' pc' i 'up'. – tvanfosson

+0

Wielkie dzięki! Wydaje się, że to wystarczy. – RajenK

+0

@tvanfosson - Świetny punkt, nawet szybkie przykłady powinny być kopiowane/wklej warte, zaktualizowane! –

4

Używałbym kodu Nick'a (zawarty w instrukcjach using, aby kontekst i zlecenie zostały prawidłowo usunięte). Jeśli chodzi o uprawnienia, musisz mieć przynajmniej wystarczające uprawnienia w jednostce organizacyjnej, w której tworzysz użytkownika do tworzenia obiektów i zarządzania nimi. Utworzę konkretnego użytkownika, pod którym uruchomi się twój program i da mu tylko tyle uprawnień, aby wykonać zadania, które są mu potrzebne w tej jednostce organizacyjnej i nie więcej.

3

Tak można również skorzystać z poniższego kodu, aby utworzyć większość użytkowników

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

      } 
     } 
1

Spróbuj z tym kodem.

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

    } 
} 
Powiązane problemy