erhalten Sie Benutzernamen in einer Active Directory-Gruppe über .net
Den code unten wird mir der Benutzer in der Gruppe, aber es wird zurückgegeben
"CN=johnson\,Tom,OU=Users,OU=Main,DC=company,DC=com"
Will ich einfach nur wieder den Ersten und Letzten Namen. Wie kann ich dies erreichen?
DirectoryEntry ou = new DirectoryEntry();
DirectorySearcher src = new DirectorySearcher();
src.Filter = ("(&(objectClass=group)(CN=Gname))");
SearchResult res = src.FindOne();
if (res != null)
{
DirectoryEntry deGroup = new DirectoryEntry(res.Path);
PropertyCollection pcoll = deGroup.Properties;
foreach (object obj in deGroup.Properties["member"])
{
ListBox1.Items.Add(obj.ToString());
}
}
- Das folgende ist nicht wirklich eine Antwort, nur eine Warnung: wickeln Sie Ihre DirectoryEntry, DirectorySearcher-und vor allem jede SearchResultCollections (z.B. aus dem Aufruf DirectorySearcher.FindAll) in einer using-Anweisung, oder ein try/finally-mit einem Dispose-Aufruf. SearchResultCollections nicht Müll gesammelt. Ich jagte ein Speicherleck Tage nach der Anwendung ein Beispiel habe ich online gefunden, dass nicht Entsorgen alles. Überprüfen Sie die MS-Dokumentation gründlich zu sehen, was alle beteiligten Klassen in der Suche " Active Directory hav
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lieber mit den Klassen im System.DirectoryServices.Kontoverwaltung:
Suche durch die Gruppe.Mitglieder Eigentum, bis Sie eine AUFTRAGGEBER, die Sie möchten. Extrahieren Sie dann den Namen so:
Ihren code verwenden, der givenName (Vorname) und sn (Nachname) Eigenschaften funktionieren sollte.
Wenn Sie das System verwenden.DIrectoryServices.Kontoverwaltung namespace UserPrincipal (wie @russell-mcclure empfohlen), finden Sie GivenName und Familienname Eigenschaften auch.
Kontoverwaltung ist sehr praktisch, wenn Sie zum durchqueren einer vertrauenswürdigen Gesamtstruktur und müssen den globalen Katalog zur Suche nach dem Benutzer.
Dies ist ein PowerShell-Skript, das ich gemacht habe, es zu tun, ohne mit der Kontoverwaltung Klassen. Es sollte einfach genug, um es zu übersetzen in C#: