Ho una soluzione funzionante, tuttavia sono abbastanza sicuro che esiste un metodo meno dispendioso in termini di risorse perché la soluzione corrente prevede l'esecuzione di una query per ottenere il membro dei gruppi e quindi una query per ottenere informazioni su ciascun utente.Ottieni utenti "membri" di un gruppo
Ecco il codice che ho:
DirectoryEntry root = new DirectoryEntry("LDAP://server:port");
DirectorySearcher searcher = new DirectorySearcher(root);
searcher.Filter = "(&(ObjectClass=Group)(CN=foo-group))";
var members = (IEnumerable)searcher.FindOne()
.GetDirectoryEntry()
.Invoke("members");
Dictionary<string , string> results = new Dictionary<string , string>();
foreach(object member in members) {
DirectoryEntry de = new DirectoryEntry(member);
results.Add(de.Properties[ "SAMAccountname" ][ 0 ].ToString(), de.Properties[ "cn" ][ 0 ].ToString());
}
Idealmente mi piacerebbe essere in grado di fare una singola query per ottenere tutti gli utenti che sono membro di un gruppo, filtra le proprietà per caricare e poi visualizzazione loro. Quindi qualcosa del genere
DirectoryEntry root = new DirectoryEntry("LDAP://server:port");
DirectorySearcher searcher = new DirectorySearcher(root);
searcher.PropertiesToLoad.Add("cn");
searcher.PropertiesToLoad.Add("SAMAccountname");
searcher.Filter = "(&(ObjectClass=user)(memberof=foo-group))";
foreach(var user in searcher.FindAll()) {
//do whatever...
}
Sfortunatamente, questo non funziona per qualche motivo.
Grazie per il vostro aiuto,
Questo sta funzionando bene, grazie. Tuttavia qual è la differenza tra questo e l'altro metodo. C'è un modo per specificare il server su cui sta eseguendo la ricerca. Voglio assicurarmi che non ci siano discrepanze con altri dati che sto visualizzando. –
Non sono sicuro al 100% di cosa stia facendo sotto le copertine ma li ho mixati prima senza problemi o discrepanze. –
Hai un'idea di come associare il dominio al server LDAP appropriato? –