Lo sapevate che la classe DirectorySearcher non consente solamente la ricerca di oggetti in Active Directory, ma consente anche la loro manipolazione, quindi l' aggiunta, la modifica e la cancellazione di oggetti. Come?
Per prima cosa bisogna connettersi ad AD con il codice seguente :
//Creo la directory entry per la connessione
this.entry = new DirectoryEntry();
entry.Username = Settings.Default.Username;
entry.Password = Settings.Default.Password;
entry.Path = "LDAP://xxx/OU=xxx,DC=xxx,DC=xxx,DC=xxx";
//Avviamo le ricerche
using (DirectorySearcher searcher = new DirectorySearcher(this.entry))
{
searcher.Filter = this.Filtro;
searcher.Sort = new SortOption("samaccountname", SortDirection.Ascending);
//Loop per i risultati
foreach (Proprietà item in this.Proprietà)
Adesso possiamo fare le nostre query. Ora proviamo a cancellare un oggetto. Una volta connessi dobbiamo ricercare l' oggetto e IMHO fatelo con il SID cosi' siete sicuri che quello che volete cancellare è quello che avete trovato ...
DirectoryEntry user = this.entry.Children.Find("CN=[SID]", "objectsid");
this.entry.Children.Remove(user);
this.entry.CommitChanges();
this.entry.Close();
Nulla di piu' semplice è aggiungere un nuovo oggetto, magari specificando anche in quale OU (Organizational Unit) volete piazzarlo.
//Creo l' oggetto nella OU user
DirectoryEntry de = this.entry.Children.Add("Joydip", "user");
//Imposto Pwd e descrizione
de.Invoke("SetPassword", new object[] { "jk" });
de.Invoke("Put", new object[] { "Description", "New User" });
//Salviamo le modifiche
de.CommitChanges();
//Cerco un gruppo e lo aggiungo per questo user
DirectoryEntry dE = this.entry.Children.Find(
"Guests", "group");
if (dE != null)
{
dE.Invoke("Add", new object[]
{
de.Path.ToString() });
}
}
Lo stesso discorso fatto sopra puo' essere applicato per modificare un oggetto già presente in AD.
Vi ricordo infine che DirectorySearcher puo' essere usato anche per interagire con un IIS, per esempio, o una macchina remota. Cambia solamente la stringa di connessione.
Infine se lavorate su web potete paginare i risultati, e utilizzare la cache, tanto non è che nel dominio vengono creati utenti ogni 5 minuti ... almeno non nel mio!!