Jak mogę uzyskać listę użytkowników z Active Directory? Czy istnieje sposób na pobranie nazwy użytkownika, imienia, nazwiska? Widziałem podobny post, w którym to zostało użyte:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
Nigdy nie robiłem nic z Active Directory, więc jestem kompletnie zagubiony. Każda pomoc byłaby bardzo mile widziana!
c#
asp.net
.net
active-directory
Mikrofon
źródło
źródło
Odpowiedzi:
Jeśli dopiero zaczynasz korzystać z Active Directory, proponuję najpierw zrozumieć, w jaki sposób Active Directory przechowuje dane.
Active Directory jest w rzeczywistości serwerem LDAP. Obiekty przechowywane na serwerze LDAP są przechowywane hierarchicznie. Jest to bardzo podobne do przechowywania plików w systemie plików. Dlatego otrzymał nazwę Serwer katalogów i Active Directory
Kontenery i obiekty w usłudze Active Directory można określić za pomocą pliku
distinguished name
. Nazwa wyróżniająca jest takaCN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
. Podobnie jak tradycyjna relacyjna baza danych, możesz uruchamiać zapytania na serwerze LDAP. Nazywa się to zapytaniem LDAP.Istnieje wiele sposobów uruchamiania kwerendy LDAP w środowisku .NET. Możesz użyć DirectorySearcher z
System.DirectoryServices
lub SearchRequest zSystem.DirectoryServices.Protocol
.Jeśli chodzi o twoje pytanie, ponieważ chcesz znaleźć konkretny obiekt użytkownika głównego, myślę, że najbardziej intuicyjnym sposobem jest użycie PrincipalSearcher from
System.DirectoryServices.AccountManagement
. Możesz łatwo znaleźć wiele różnych przykładów z google. Oto próbka, która robi dokładnie to, o co prosisz.Należy zauważyć, że obiekt użytkownika usługi AD ma wiele atrybutów. W szczególności
givenName
da ciFirst Name
isn
da ciLast Name
. O nazwie użytkownika. Myślę, że miałeś na myśli nazwę logowania użytkownika. Zauważ, że istnieją dwie nazwy logowania do obiektu użytkownika usługi AD. Jednym zsamAccountName
nich jest nazwa logowania użytkownika w wersji starszej niż Windows 2000.userPrincipalName
jest zwykle używany po Windows 2000.źródło
if (((UserPrincipal)result).EmailAddress != null)
przed dodaniem wyniku do mojej listy.Jeśli chcesz filtrować aktywne konta, dodaj to do kodu Harveya:
po pierwszym użyciu. Następnie dodaj
przed znalezieniem wszystkich. I to powinno dać ci aktywnych.
źródło
searcher.QueryFilter = userPrin;
ponieważ już przekazujemy nazwę użytkownika do głównej wyszukiwarki podczas inicjalizacji, ale poza tym dziękujemy za wskazówkę dotyczącą filtrowania tylko aktywnych użytkowników!using (var searcher = new PrincipalSearcher(new UserPrincipal(context){ Enabled = true }))
Enabled
wartość:if (userPrincipal.Enabled.HasValue)
Z pewnością zasługa @Harvey Kwok tutaj, ale chciałem tylko dodać ten przykład, ponieważ w moim przypadku chciałem uzyskać aktualną listę UserPrincipals. Prawdopodobnie skuteczniejsze jest filtrowanie tego zapytania z góry, ale w moim małym środowisku po prostu łatwiej jest wyciągnąć wszystko, a następnie filtrować w razie potrzeby z mojej listy.
W zależności od potrzeb może nie być konieczne rzutowanie do DirectoryEntry, ale niektóre właściwości nie są dostępne w UserPrincipal.
źródło
Dołącz plik System.DirectoryServices.dll, a następnie użyj poniższego kodu:
źródło