我可以通过使用C#搜索Active Directory来检索域名和用户名吗?

时间:2009-07-14 13:24:07

标签: c# .net active-directory ldap

所有

我有一个很大的用户电子邮件列表,我需要获取每个用户的域名和域名。

我的组织包含大量域名,我们的用户使用与其电子邮件地址不同的用户名登录其计算机。

请告知我们是否可以编写可以使用每个用户的电子邮件搜索AD的C#实用程序,或者我们是否可以以更简单的方式执行此操作。

2 个答案:

答案 0 :(得分:1)

如果该数据全部在AD中,那么您可以使用LDAP查询它。在这种情况下,我建议使用DirectorySearcher,因为您使用的是.NET。

答案 1 :(得分:1)

您使用的是.NET 3.5吗?如果是这样 - AD在.NET 3.5中有很多新功能 - 请查看Ethan Wilanski和Joe Kaplan撰写的这篇文章Managing Directory Security Principals in .NET 3.5

一个重要的新功能是“PrincipalSearcher”类,它可以极大地简化在AD中查找用户和/或组。

如果您不能使用.NET 3.5,请使用DirectorySearcher并指定电子邮件地址作为搜索条件,并检索用户名(哪一个?有大量不同的用户名!):

DirectoryEntry deRoot = new DirectoryEntry("LDAP://cn=Users,dc=yourdomain,dc=com");

DirectorySearcher deSrch = new DirectorySearcher(deRoot);

deSrch.SearchScope = SearchScope.Subtree;

deSrch.PropertiesToLoad.Add("sn");  // surname = family name
deSrch.PropertiesToLoad.Add("givenName");
deSrch.PropertiesToLoad.Add("samAccountName");

deSrch.Filter = string.Format("(&(objectCategory=person)(mail={0}))", emailAddress);

foreach(SearchResult sr in deSrch.FindAll())
{
  // you can access the properties of the search result
  if(sr.Properties["sn"] != null)
  {
     string surname = sr.Properties["sn"][0].ToString();
  }
  // and so on, for all the other properties, too
}

希望这有帮助!

马克