Bagaimana saya bisa mendapatkan daftar pengguna dari direktori aktif? Apakah ada cara untuk menarik nama pengguna, nama depan, nama belakang? Saya melihat posting serupa di mana ini digunakan:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
Saya tidak pernah melakukan apa pun dengan direktori aktif jadi saya benar-benar tersesat. Bantuan apa pun akan sangat dihargai!
c#
asp.net
.net
active-directory
Mike
sumber
sumber
Jawaban:
Jika Anda baru mengenal Active Directory, saya sarankan Anda memahami cara Active Directory menyimpan data terlebih dahulu.
Active Directory sebenarnya adalah server LDAP. Objek yang disimpan di server LDAP disimpan secara hierarki. Ini sangat mirip dengan Anda menyimpan file di sistem file Anda. Itu sebabnya ia mendapat nama server Direktori dan Direktori Aktif
Wadah dan objek di Active Directory dapat ditentukan dengan a
distinguished name
. Nama yang dibedakan adalah seperti iniCN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
. Seperti database relasional tradisional, Anda dapat menjalankan kueri pada server LDAP. Ini disebut kueri LDAP.Ada sejumlah cara untuk menjalankan kueri LDAP di .NET. Anda dapat menggunakan DirectorySearcher dari
System.DirectoryServices
atau SearchRequest dariSystem.DirectoryServices.Protocol
.Untuk pertanyaan Anda, karena Anda meminta untuk menemukan objek utama pengguna secara khusus, menurut saya cara yang paling intuitif adalah dengan menggunakan PrincipalSearcher dari
System.DirectoryServices.AccountManagement
. Anda dapat dengan mudah menemukan banyak contoh berbeda dari google. Berikut adalah contoh yang melakukan apa yang Anda minta.Perhatikan bahwa pada objek pengguna AD, ada sejumlah atribut. Secara khusus,
givenName
akan memberi AndaFirst Name
dansn
akan memberi AndaLast Name
. Tentang nama pengguna. Saya pikir yang Anda maksud adalah nama logon pengguna. Perhatikan bahwa ada dua nama logon pada objek pengguna AD. Salah satunyasamAccountName
, yang juga dikenal sebagai nama logon pengguna pra-Windows 2000.userPrincipalName
umumnya digunakan setelah Windows 2000.sumber
if (((UserPrincipal)result).EmailAddress != null)
sebelum menambahkan hasilnya ke daftar saya.Jika Anda ingin memfilter akun aktif y, tambahkan ini ke kode Harvey:
setelah penggunaan pertama. Lalu tambahkan
sebelum menemukan semua. Dan itu akan membuat Anda menjadi yang aktif.
sumber
searcher.QueryFilter = userPrin;
karena kami telah meneruskan prinsip pengguna ke pencari utama pada inisialisasi, tetapi sebaliknya terima kasih atas tip tentang memfilter pengguna aktif saja!using (var searcher = new PrincipalSearcher(new UserPrincipal(context){ Enabled = true }))
Enabled
memiliki nilai terlebih dahulu:if (userPrincipal.Enabled.HasValue)
Pastinya kredit diberikan kepada @Harvey Kwok di sini, tetapi saya hanya ingin menambahkan contoh ini karena dalam kasus saya, saya ingin mendapatkan Daftar Prinsip Pengguna yang sebenarnya. Mungkin lebih efisien untuk memfilter kueri ini di muka, tetapi di lingkungan saya yang kecil, lebih mudah untuk menarik semuanya dan kemudian memfilter sesuai kebutuhan nanti dari daftar saya.
Bergantung pada apa yang Anda butuhkan, Anda mungkin tidak perlu mentransmisikan ke DirectoryEntry, tetapi beberapa properti tidak tersedia dari UserPrincipal.
sumber
Sertakan System.DirectoryServices.dll, kemudian gunakan kode di bawah ini:
sumber