2010-02-21 27 views
18

Sto cercando un modo per creare utenti di Active Directory e impostare la password, preferibilmente senza fornire i privilegi di amministratore di dominio della mia applicazione/servizio.Creazione utente di Active Directory con password in C#

ho provato la seguente: si crea

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

L'utente, ma sembra che la password non viene impostata per l'utente.

Qualcuno ha un'idea su come impostare la password dell'utente inizialmente durante la creazione dell'utente? So di

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

Ma ciò richiede che il mio codice venga eseguito con i privilegi di amministratore di dominio. Dato che non vedo il punto di concedere il mio codice ai privilegi di amministratore del dominio, solo per impostare la password iniziale (autorizzo anche le reimpostazioni delle password degli utenti, ma quelle eseguite nel contesto di quel particolare utente), spero che qualcuno abbia un intelligente soluzione che non mi richiede di farlo.

Grazie in anticipo!

+0

Questa è l'unica opzione che abbiamo avuto, scommetto che siete nella stessa barca, ma vi ho fornito l'alternativa 3.5 di seguito nel caso fosse un'opzione. Ho 1/4 del codice rispetto allo stile 'DirectoryEntry' che era l'unica opzione prima, io ** altamente ** consiglio di dare un nuovo look al nuovo spazio dei nomi. –

risposta

25

Si può fare tutto questo processo molto più facile ora con System.DirectoryServices.AccountManagement (fino a quando si è in .Net 3.5):

See here for a full rundown

Ecco un rapido esempio del vostro caso specifico:

+3

Non dimenticare di disporre del contesto e degli oggetti principali quando hai finito. Questo è meglio con le istruzioni 'using' su' pc' e 'up'. – tvanfosson

+0

Grazie mille! Questo sembra fare il trucco. – RajenK

+0

@tvanfosson - Ottimo punto, anche gli esempi veloci dovrebbero essere copia/incolla degni, aggiornati! –

4

Vorrei utilizzare il codice di Nick (racchiuso nelle istruzioni using in modo che il contesto e l'entità siano disposti correttamente). Per quanto riguarda i privilegi, è necessario disporre almeno di privilegi sufficienti sull'unità organizzativa in cui si sta creando l'utente per creare e gestire oggetti. Creo un utente specifico in base al quale verrà eseguito il programma e gli fornirò i privilegi necessari per eseguire le attività necessarie in quell'unità organizzativa specifica e non più.

3

Si può anche utilizzare sotto il codice per creare maggior parte degli utenti

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

Prova con questo codice.

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

    } 
} 
Problemi correlati