foreach (DataRow dr in myDT.Rows)
{
try
{
Console.WriteLine("Inserisco Utente " + dr[0].ToString());
int _stasbar = 0;
DirectoryEntry UserToAdd = myDE.Children.Find("OU=" + unit + ",OU=" + s);
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = UserToAdd;
deSearch.Filter = "(&(objectClass=group) (samAccountName=" + dr[2].ToString() + "))";
SearchResultCollection results = deSearch.FindAll();
// Finisci di creare i gruppi
DirectoryEntry AggiungiUtente = UserToAdd.Children.Add("CN=" + dr[0].ToString(), "user");
// trova lo schema in cui si vuole inserire l'utente in active directory
AggiungiUtente.Properties["samAccountName"].Add(dr[0].ToString());
AggiungiUtente.Properties["wWWHomePage"].Value = @http://www.mysite.it; AggiungiUtente.Properties["name"].Value = dr[0].ToString();
AggiungiUtente.Properties["displayName"].Value = dr[0].ToString();
AggiungiUtente.Properties["userPrincipalName"].Value = dr[0].ToString() + "@Dominio.it";
AggiungiUtente.Properties["description"].Add(dr[5].ToString());
AggiungiUtente.CommitChanges();
// Dopo il primo invoke passa la password al ramo corretto
AggiungiUtente.Invoke("SetPassword", dr[1].ToString());
AggiungiUtente.CommitChanges();
UsersOperations UP = new UsersOperations();
UP.CantChagePassword(AggiungiUtente);
AddToGroupUser(dr[2].ToString(), dr[0].ToString());
_stasbar++;
// a fini statistici aumenta il contatore delle operazioni
}
catch (Exception ex)
{
Console.WriteLine("Error : " + ex.Message.ToString() + " " + ex.StackTrace.ToString());
Console.WriteLine("Premete un tasto qualsiasi per continuare");
Console.ReadLine();
}
}
Il codice esegue le seguenti operazioni:
-
Connessione ad Active Directory
-
Si ricerca l'Organization Unit in cui vuole essere creato l'utente
-
Viene aggiunto un nuovo ramo (l'utente)
-
Vengono impostate le proprietà di base
-
Viene invocato il metodo SetPassword per assegnare la password al vostro utente.
-
Viene invocate un metodo esterno di nome AddToGroupUser
///
/// Aggiunge un utente esistente all'interno di un gruppo esistente
///
/// string il nome del gruppo senza CN
/// strin gil nome dell'utente senza CN
public void AddToGroupUser(string Gruppo, string Utente)
{
DirectoryEntry oGrp = new DirectoryEntry("LDAP://CN=" + Gruppo + ",OU=Produzione,OU=MiaOrganizationUnit,DC=MioDominio,DC=it", "admin", "password", AuthenticationTypes.Secure);
oGrp.Invoke("Add", new Object[] {"LDAP://CN=" + Utente + ",OU=Produzione,OU=MiaOrganizationUnit,DC=MioDominio,DC=it"});
}
L'assegnazione dell'utente ad un gruppo è l'ultima delle operazioni da effettuare in una applicazione Batch.
Il metodo qui sopra assegna l'entità (utente) ad un altra entità contenitore (gruppo).
Successivamente alla creazione è necessario abilitare gli utenti.
///
/// Abilita un account in Active Directory
///
/// System.DirectoryServices.DirectoryEntry
public void EnableAccount(DirectoryEntry de)
{
try
{
de.Properties["userAccountControl"].Value = 0x0001;
de.CommitChanges();
}
catch (Exception ex)
{
// Exception Gestita
}
}
A questo punto potete aprire lo Snap-In di Active Directory e gustarvi lo spettacolo ;)
A dir la verità è anche possibile elevarsi di più. Per esempio potete automatizzare ancora di più l'operazione con un Windows Service ed un FileSystemWatcher. Create il vostro file Excel, inserite i valori e spostate semplicemente il file all'interno di questa cartella... et voilà.