惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
美团技术团队
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
A
About on SuperTechFans
Recent Announcements
Recent Announcements
D
Docker
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
腾讯CDC
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志

博客园 - yellowwood

cmder简单使用 回想一下2013中国软件技术大会 Should Assertion Library 数字用千分位表示 报表产生方式之二比较 报表产生方式之一图示 报表订阅 報表部署 via VS2005 报表参数 报表rdl嵌入网页(ASP.NET) 報表与子報表 RDL之矩陣 [Oracle整理]数据类型大全 [Oracle整理].NET 调用 Oracle之REF Cursor [Oracle整理]Oracle游标(显示游标&隐式游标&动态游标&参数游标) [Oracle整理]Oracle之Procedure参数类型 [Oracle整理]Oracle之数组 [Oracle整理]Oracle之ROWTYPE和RECORD [Oracle整理]synonym及其应用
从AD( Active Directory )读取 Email
yellowwood · 2012-02-24 · via 博客园 - yellowwood

公司电脑使用AD进行管理,非Work Group管理。
建立AD帐号了,才有”公司Email“,所以从AD获取”公司Email“是再好不过的了。


了解 AD( Active Directory )
Active Directory 是树形结构。树形结构中的每一个节点都包含一组属性。


查看AD结构
使用MS提供的工具,ADExplorer.exe 。


.NET 对AD支持
System.DirectoryServices 命名空间
1 命名空间包含两个组件类别:DirectoryEntry 和 DirectorySearcher,它们使用 Active Directory Services Interface (ADSI) 技术。
2 提供了对其添加、修改和删除。
DirectoryEntry 类别
1 封装 Active Directory 底层架构中的节点或对象。
2 系结至对象、读取属性 (Property) 和更新属性 (Attribute)。
3 提供生命周期管理与导航方法的支持,包括建立、删除、重新命名、移除子节点和列举子系等。
DirectoryServices.DirectorySearcher
1 执行对 Active Directory 底层架构的查询。
2 传回 SearchResult 的实例,其包含在 SearchResultCollection 类别的实例中。
DirectoryServices.SearchResult
DirectoryServices.SearchResultCollection


查询语法
筛选条件使用下列方针:
1 字串必须包含在括号内。
3 表达式可以使用关系运算符:<、<=、=、>= 和 >。一个范例是 "(objectClass=user)"。另一个范例是 "(lastName>=Davis)"。
3 复合表达式是以前置运算符 & 和 |组成的。一个范例是 "(&(objectClass=user)(lastName= Davis))"。
另一个范例是 "(&(objectClass=printer)(|(building=42)(building=43)))"。
详细:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/search_filter_syntax.asp)


实际例子

<add key="ADServerPath" value="LDAP://192.168.0.6/DC=wood,DC=com,DC=cn"/>
/// <summary>
/// 依据AD帐号从 AD 获取用户的email。
/// </summary>
/// <param name="memberID">AD帐号</param>
/// <returns></returns>
public static string GetMailAddressFromAD(string memberID)
{
	string mailAdd = string.Empty;
	System.DirectoryServices.DirectorySearcher search = null;
	System.DirectoryServices.SearchResult r = null;

	try
	{
		search = new System.DirectoryServices.DirectorySearcher();
		string ADServerPath = ConfigurationManager.AppSettings["ADServerPath"].ToString();
		string filter =
			"(&(&(& (mailnickname=*) (| (&(objectCategory=person)(objectClass=user)

(samAccountName=" + memberID + ")(|(homeMDB=*)(msExchHomeServerName=*))) ))))";
			
		search.SearchRoot = new System.DirectoryServices.DirectoryEntry(ADServerPath);
		search.Filter = filter;
		search.SearchScope = System.DirectoryServices.SearchScope.Subtree;

		r = search.FindOne();

		if (r != null)
		{
			mailAdd = r.Properties["mail"][0].ToString();
		}
	}
	catch (Exception ex)
	{
		throw new Exception("获取用户邮件地址时出错。",ex);
	}
	return mailAdd;
}
/// <summary>
/// 依据用户名从 AD 获取用户的email。
/// </summary>
/// <param name="userName">用户名</param>
/// <returns></returns>
public static string GetMailAddressFromADByUserName(string userName)
{
	string mailAdd = string.Empty;
	System.DirectoryServices.DirectorySearcher search = null;
	System.DirectoryServices.SearchResult r = null;

	try
	{
		search = new System.DirectoryServices.DirectorySearcher();
		string ADServerPath = ConfigurationManager.AppSettings["ADServerPath"].ToString();

		search.SearchRoot = new System.DirectoryServices.DirectoryEntry(ADServerPath);
		// * 表示通配符,类似SQL 的 Like '%userName%'
		search.Filter = "(displayName=*" + userName + "*)";
		search.SearchScope = System.DirectoryServices.SearchScope.Subtree;

		r = search.FindOne();

		if (r != null)
		{
			mailAdd = r.Properties["mail"][0].ToString();
		}
	}
	catch (Exception ex)
	{
		throw new Exception("获取用户邮件地址时出错。",ex);
	}
	return mailAdd;
}