用户在 Exchange Server 的通讯簿中搜索,使用 ASP 和 ADSI / LDAP






4.16/5 (10投票s)
2004 年 5 月 11 日
3分钟阅读

138541

934
使用 ASP 和 ADSI / LDAP 在 Exchange Server 的通讯簿中搜索用户。
引言
通过 ADSI(Active Directory Service Interface),微软提供了一个 COM 组件,用于访问各种目录服务。ADSI 是 Windows 2000 的一个组件。
您可以将 ADSI 视为各种目录服务的类似 ODBC 接口。在网络中,目录服务充当用户和功能的管理,例如计算机、打印机、用户和服务。
目录服务的结构是分层的,可以看作是一个目录树:有一个根,您可以从根开始访问其他条目。根可以包含容器(节点)和叶。容器本身可以包含其他条目,而叶标志着目录树中分支的末端。目录中的每个条目都描述一个对象并具有特定的属性。这可以用 Windows 文件系统来说明:硬盘驱动器C: 是根,目录/文件夹是容器,文件是叶。
ADSI 支持的目录系统示例包括:WinNT(访问 Windows NT)、GC(Windows 2000 全局编录)、IIS(Internet Information Server 元数据库)、NWCOMPAT(Novell NetWare 3.x)、NDS(Novell NetWare 4.x)和 LDAP 目录。
在这种情况下,将特别考虑目录服务 LDAP。LDAP(轻型目录访问协议)于 90 年代初在密歇根大学开发,允许更轻松地访问 X.500 协议的目录服务。LDAP 基于 TCP/IP,使用端口号 389。越来越多的公司在其产品中集成 LDAP,例如微软的 Exchange、Windows 2000 和 Site Server。
在 Exchange LDAP 目录中搜索
使用 GetObject
方法,您可以访问 LDAP 目录服务中已知的对象或容器,从而可以显示通讯簿。
但是,如果要搜索用户,该怎么办?
在这种情况下,ADSI 通过 OLE-DB 提供对目录条目的访问。这使得进行查询成为可能。注意:通过 OLE-DB 的访问只是只读访问。无法修改条目。
LDAP 查询需要以下信息
- 目录服务层次结构的起始对象。
- 搜索条件。
- 应返回的找到对象的属性。
- 基于起始对象的搜索深度。
LDAP 查询的语法是
<LDAP://Servername/Startobject> ; search criteria ;
returned attributes ; search depth
搜索条件的一个特征是用于定义搜索条件的运算符。
运算符
- & - 逻辑“与”
- | - 逻辑“或”
- ! - 逻辑“非”
- = - 等于
- > - 大于
- < - 小于
放在条件的前面。
例如:(|(givenname=名)(sn=姓氏*))。
星号 (*) 符号可以用作多个符号的占位符。
一般来说,Exchange Server 仅支持在右侧使用星号符号。必须首先在 Exchange Server 的 XXXXX 下激活左侧星号符号的使用。有三种可能的搜索深度:BASE(仅基本级别)、ONELEVEL(基本级别和第一个子级别)和 SUBTREE(基本级别和所有后续子级别)。
示例:在 Exchange LDAP 目录中搜索
首先,建立与数据库的 ADO 连接
set oConn = CreateObject("ADODB.Connection")
set oCommand = CreateObject("ADODB.Command")
oConn.Provider = "ADsDSOObject"
oConn.Open "Ads Provider"
然后进行 LDAP 查询并通过 ADO 发送到数据库
'***Variables and constants
strServerName = "Exchange01"
strName = Request.Form("name")
strLastname = Request.Form("lastname")
strQuery = "<LDAP://" & strServername & _
">;(|(sn=" & strLastname & "*)(givenname=" & strName2& "*));*;subtree"
oCommand.CommandText = strQuery
set oRS = oCommand.Execute
如果查询成功,结果将返回到 RecordSet
对象中。然后可以使用已知的 ADO 方法显示结果
<%
if not oRS.eof then
%>
<div align="center">
<table cellpadding="0" border="0" cellspacing="0">
<tr bgcolor="#C0C0C0">
<td height="20"><b>Name</b></td>
<td height="20"><b>Department</b></td>
<td height="20"><b>Phone</b></td>
<td height="20"><b>Email</b></td>
</tr>
<%While not ors.eof%>
<tr>
<td><%=oRS.Fields("sn")%>, <%=oRS.Fields("givenname")%></td>
<td><%=oRS.Fields("department")%></td>
<td><%=oRS.Fields("telephoneNumber")%></td>
<td><%=oRS.Fields("mail")%></td>
</tr>
<%
oRS.MoveNext
wend %>
</table>
</div>
<%else
Response.Write "No item found"
end if%>
Exchange LDAP 中用户属性的概述
在 Exchange 中,以下属性分配给每个用户
名称
邮件
cn
sn
givenname(名字)
member(成员)
department
title
uid
company(公司)
telephonenumber(电话号码)
facsimiletelephonenumber(传真号码)
postaladdress(邮政地址)
homepostaladdress(家庭邮政地址)
physicalDeliveryOfficeName(办公地点)
.
摘要
如果您将这些组件放在一起并添加一个搜索掩码,那么您将获得 Exchange 通讯簿的轻松搜索功能,例如,用于内部网。
下载文件并享受!