หากคุณเพิ่งเริ่มใช้ Active Directory ขอแนะนำให้คุณทำความเข้าใจว่า Active Directory จัดเก็บข้อมูลอย่างไรก่อน
Active Directory เป็นเซิร์ฟเวอร์ LDAP ออบเจ็กต์ที่จัดเก็บในเซิร์ฟเวอร์ LDAP จะถูกจัดเก็บตามลำดับชั้น คล้ายกับคุณเก็บไฟล์ไว้ในระบบไฟล์ของคุณ นั่นเป็นเหตุผลว่าทำไมจึงมีเซิร์ฟเวอร์ชื่อไดเรกทอรีและ Active Directory
คอนเทนเนอร์และอ็อบเจ็กต์บน Active Directory สามารถระบุได้โดยไฟล์distinguished name
. CN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
ชื่อที่แตกต่างเป็นเช่นนี้ เช่นเดียวกับฐานข้อมูลเชิงสัมพันธ์แบบดั้งเดิมคุณสามารถเรียกใช้แบบสอบถามกับเซิร์ฟเวอร์ LDAP เรียกว่าการสืบค้น LDAP
มีหลายวิธีในการเรียกใช้แบบสอบถาม LDAP ใน. NET คุณสามารถใช้DirectorySearcherจากSystem.DirectoryServices
หรือSearchRequestSystem.DirectoryServices.Protocol
จาก
สำหรับคำถามของคุณเนื่องจากคุณจะถามเพื่อหาวัตถุผู้ใช้หลักโดยเฉพาะอย่างยิ่งผมคิดว่าวิธีที่ง่ายที่สุดคือการใช้PrincipalSearcherSystem.DirectoryServices.AccountManagement
จาก คุณสามารถค้นหาตัวอย่างต่างๆมากมายจาก google ได้อย่างง่ายดาย นี่คือตัวอย่างที่ทำในสิ่งที่คุณต้องการ
using (var context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
foreach (var result in searcher.FindAll())
{
DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
Console.WriteLine("First Name: " + de.Properties["givenName"].Value);
Console.WriteLine("Last Name : " + de.Properties["sn"].Value);
Console.WriteLine("SAM account name : " + de.Properties["samAccountName"].Value);
Console.WriteLine("User principal name: " + de.Properties["userPrincipalName"].Value);
Console.WriteLine();
}
}
}
Console.ReadLine();
โปรดสังเกตว่าบนวัตถุผู้ใช้ AD มีแอตทริบิวต์จำนวนหนึ่ง โดยเฉพาะอย่างยิ่งgivenName
ที่จะทำให้คุณFirst Name
และจะทำให้คุณsn
Last Name
เกี่ยวกับชื่อผู้ใช้ ฉันคิดว่าคุณหมายถึงชื่อล็อกออนของผู้ใช้ โปรดสังเกตว่ามีชื่อล็อกออนสองชื่อบนวัตถุผู้ใช้ AD หนึ่งคือsamAccountName
ซึ่งเรียกอีกอย่างว่าชื่อล็อกออนของผู้ใช้ก่อน Windows 2000 userPrincipalName
โดยทั่วไปจะใช้หลัง Windows 2000