【发布时间】:2009-07-14 23:42:20
【问题描述】:
全部,
我有一个很大的用户电子邮件列表,我需要为每个用户获取用户名和域名。
我的组织包含许多域,我们的用户使用与其电子邮件地址不同的用户名登录到他们的计算机。
请告知我们是否可以编写一个可以使用每个用户的电子邮件搜索 AD 的 C# 实用程序,或者我们是否可以以更简单的方式进行。
【问题讨论】:
标签: c# .net active-directory ldap
全部,
我有一个很大的用户电子邮件列表,我需要为每个用户获取用户名和域名。
我的组织包含许多域,我们的用户使用与其电子邮件地址不同的用户名登录到他们的计算机。
请告知我们是否可以编写一个可以使用每个用户的电子邮件搜索 AD 的 C# 实用程序,或者我们是否可以以更简单的方式进行。
【问题讨论】:
标签: c# .net active-directory ldap
您使用的是 .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
}
希望这会有所帮助!
马克
【讨论】:
如果这些数据都在 AD 中,那么您可能可以使用 LDAP 查询它。在这种情况下,我会推荐 DirectorySearcher,因为您使用的是 .NET。
【讨论】: