有了 Active Directory 服务接口 (ADSI),就可以使用 Microsoft Visual Basic 编程系统、Java、C 或 Visual C++ 开发系统等高级工具方便地创建支持目录的应用程序,而无须担心不同目录实现或命名空间的潜在差异。
Microsoft%26reg; Exchange 5.5 是可扩展的、可靠且安全的消息传递平台。Microsoft Exchange 5.5 目录服务支持轻型目录访问协议 (LDAP) 第三版。可以将 ADSI 与 LDAP 提供程序一起使用,处理 Microsoft Exchange 5.5 目录中的任何对象。管理员和开发人员使用这一功能以及协作数据对象 (CDO),可以高效率地编写功能强大的协作应用程序或管理工具。CDO 以前被称为 Active Messaging,它提供处理消息和日历对象的对象接口以及提交和检索此类对象。
本文有助于应用程序开发人员使用 Exchange 5.5 目录服务上的 ADSI,编写支持目录的应用程序。
ADSI 和 LDAP ADSI 为目录对象提供 COM 接口。ADSI 建立在基于提供程序的模型之上,在提供程序映射基础目录系统和 ADSI 客户端显现的 COM 接口的同时,客户端与 ADSI 所显现的 COM 接口进行交互。在 NDS 目录中创建或更改用户的 ADSI 应用程序,可用于在 Exchange 5.5 目录中创建用户。另一方面,LDAP 是用于目录访问的有线协议。所以,LDAP 应用程序仅限访问显现 LDAP 协议的目录。 既然 ADSI 是一组 COM 对象,因此可方便地用于 VB 或 Java 脚本,使基于 Web 的应用程序支持目录。而使用基于‘C’的 LDAP API 完成这一操作就要困难得多。 ADSI 和 ADO ADO 用于在目录中执行搜索,并以表格形式给出结果。另一方面,ADSI 用于更改目录中的项。通常,使用 ADO 搜索一个或多个对象,然后在结果集中反复查找,并更改所指定的对象。在下面的示例中给出了 ADSI 和 ADO 的用法。 Microsoft Exchange 目录架构 为了编写在 Exchange 目录上使用 ADSI 的应用程序,必须对目录架构有一定的了解。该架构定义了目录中的对象类、对象类之间的关系、每个对象类的属性以及属性和类的特性。使用 Exchange Administration 程序,您可以查看 Exchange 目录架构。若要执行此操作: 在 ADSI 支持中有以下三个重要的属性: Heuristic Heuristic 属性的解释如下: 查看 Heuristic 值,就可以确定特定属性是否可见。例如,Heuristic 值为 3 说明该属性不能在站点间复制,且对于匿名 LDAP 客户可见。 Heuristic 值为 11 说明该属性为操作属性,且对于已验证的 LDAP 客户端可见。操作属性(设置了 Heuristic 位 3 的属性)对 ADSI 不可见,即使可以设置其值,也是如此。要获得操作属性的值,必须使用 ADO 查询,如下例所示。注意:更改 Heuristic 属性位 0 的值,可能会使目录复制停止。不应更改某一属性的 Heuristic 特性的这一位。 ACL: ACL 属性决定了用户更改属性所需的权限。ACL 属性值的定义如下: 0:只有系统可以更改该属性 1:有更改管理权限的用户可以更改该属性 2:有更改用户权限的用户可以更改该属性 3:有更改许可权限的用户可以更改该属性 说明 说明确定了属性或类的 LDAP 名称。 注意 更改 LDAP 名称将出现互操作性问题。 常用对象类 下面给出了常用对象类及其最重要的属性。下表中的列解释如下: LDAP 名称:通过 LDAP 显现的属性名称(Exchange 架构中对该属性的说明) Exchange 名称:在 Exchange 架构中该属性的名称 Mandatory:对象的属性是强制的还是非强制的 Heuristic:属性的 heuristic 值,如上所述。 ACL:属性的访问类别如上所示。 语法:属性的语法。 Boolean:布尔型语法的属性的值为 TRUE 或 FALSE Integer:任何整数值 String(Unicode):Unicode 字符串 String(Numeric):数字字符串 String(Octet):二进制字符串。根据 LDAP,使用二进制表示的字符串编码,支持二进制属性。 Object(DS-DN):采用 rfc1779 格式的 DN(如cn=jsmith,ou=redmond,o=microsoft,c=us) 注释:关于该属性的注释。 Mail-Recipient(个人)对象类 Mail-Recipient 对象类通过 LDAP 显现为‘个人’对象类。该对象类可由邮件能发送到的所有对象类继承,例如邮箱、自定义收件人、通讯组和公用文件夹。值得指出的是该对象类是抽象的。所以您不能创建该对象类的实例。定义它只是为了让目录中的其它对象类继承其属性。下表给出了‘个人’对象类上常用的属性: Mailbox (organizationalPerson) Object Class Mailbox 对象类通过 LDAP 显现为 organizationaPerson 对象类。该对象类代表在 Microsoft Exchange 系统中包含邮件存储的一个对象。Mailbox 对象的一个关键属性是 Assoc-NT-Account,它包含对该邮箱有访问权限的 NT 帐户的安全标识符 (SID)。 Custom-Recipient(自定义收件人) Custom-Recipient 对象类通过 LDAP 显现为 custom-recipient 对象类。该对象类包含上述 organizationalPerson 对象类中除 mailPreferenceOption 之外的所有属性。Custom-Recipient 对象类还包含一个额外的、带有下列特性的强制属性: Distribution-List Distribution-List 对象类通过 LDAP 显现为 groupOfNames 对象类。其属性为: 通过 ADSI 检索增量更改 在某些应用程序(如目录同步服务)中,从 Exchange 目录获得增量更改是非常重要的。通过查找 Exchange 目录上每个对象的下列操作属性,就可实现这一目的。 USN-Changed:每次更改对象时,Exchange 目录将该整数加 1(删除与对该对象的任何其它更改一样对待);USN-Created:该整数表明在 Exchange 目录中创建此对象的时间。When-Changed:更改对象的 UTC 时间;When-Created:创建对象的 UTC 时间 通过查询 USN-Changed/Created 或 When-Changed/Created,应用程序可获得自上次轮询更改以来,在 Exchange 目录中所做的更改。 任何已验证的用户均可使用这些属性。 通过 ADSI 检索已删除的对象 检索已删除对象的功能与从 Exchange 目录检索增量更改一样重要。使用明文验证,并将“,cn=admin”附加到用户 DN 的后面(如 dc=domain,cn=jsmith,cn=admin),即可实现该操作。 将“,cn=admin”加到用户 DN 中,并对 Exchange Directory 验证客户时,就能查询称为“is-deleted”的操作属性。该属性是布尔型属性,它表明该对象是否已被删除。已删除对象被称为“逻辑删除”。逻辑删除保存的时间由 Microsoft Exchange Admin 程序中 DS Site Configuration 属性页上“Tombstone lifetime”参数给出。默认情况下,“Tombstone lifetime”设置为 30 天。如果应用程序从 Exchange Directory 获得删除的内容,则确保其在“Tombstone lifetime”期限内运行。 ADSI 示例 本节包含几个 ADSI 示例,它们给出了对 Exchange 目录的验证,查找使用 ADO 的对象,并处理使用 ADSI 的对象。 通讯组管理器 下面的代码将创建一个通讯组,并将 ADO 查询所找到的用户加入到通讯组中: 显式选项 ' used by the PutEx method to set a muti-valued property 下列代码确定了域地址的扩展名,方法是查找 Microsoft Private MDB 对象的“mail”属性: strMSPrivMDBPath = "LDAP://" + strServer + "/cn=Microsoft Private MDB,cn=" + strServer + ",cn=Servers ,cn=Configuration,ou=" + strSite + ",o=" + strOrganization 此应用程序使用‘OpenDSObject’方法访问目录对象。用户的登录域、名称和密码以参数的形式传递。值为 0 表示 ADSI LDAP 提供程序将进行简单的绑定: Set objMSPrivMDB = objMyIADs.OpenDSObject(strMSPrivMDBPath, strUserName, strPassword, 0) 下列代码生成 SMTP、MSMAIL、CCMAIL 和 X400 地址。‘US’被硬编码到 X400 地址中。可以解析 MS Private MDB 对象的‘textEncodedORaddress’属性,以确定正确的 X400‘寻址’方案: strSMTPAddr = replace(strAliasName, " ", "") + strSMTPExt 本代码创建通讯组: Set objNewDL = objRecipients.Create("groupOfNames", "cn=" + strDirectoryName) 注意,在 VBScript 中,必须使用 CStr() 字符串值正确地设置 ADSI 数据的格式: objNewDL.Put "cn", CStr(strDisplayName) 本代码创建多值属性。在 VBScript 中,必须使用括号取消对数组的引用: objNewDL.PutEx ADS_PROPERTY_UPDATE, "otherMailbox", (aOtherMailbox) 下列代码将在 Exchange 目录服务中查找其‘City’属性与搜索条件匹配的邮箱。‘City’属性的 ADSI LDAP 名称是‘l’。 Dim objADOconn' ADO connection objectDim strADOQueryString' ADO query stringDim objRS ' recordset objectDim strCriteria ' value used to search the directory treestrCriteria = "Bellevue" 本代码将更改邮箱的电话号码属性。默认情况下,所有用户都有更改其邮箱上该属性的权限。 下列代码将使浏览器弹出用户标识对话框。IIS 服务器的密码验证只能设置为‘Allow Anonymous’和‘Basic (Clear Text)’。这样,浏览器在使用‘GetObject’方法时,就能使用正确的安全上下文。 Dim strAT ' Authorization Type information 本过程将更改包含字符串数值的对象属性。要将属性设置为空字符串,必须将其从对象中删除: Sub ModifyProperty(strNewValue, strADsProperty) ADSI 的局限 ADSI 尚不能处理访问控制列表 (ACL),后者包含有关哪个用户有某个对象权限的安全信息。它不能获取 Windows NT 安全标识符 (SID),SID 是用户帐户名的二进制表示,因而无法设置创建用户权限所需的位。开发人员无法只通过 ADSI 创建实用的邮箱对象,这是因为邮箱对象要求在 Assoc-NT-Account 属性中设置 NT 帐户 SID,以及在 NT-Security-Descriptor 属性中设置邮箱对象的正确安全权限。预计在以后的版本中会提供处理 ACL 的功能。 使用 ADSI 增强 Exchange 有了 ADSI,开发人员无须再开发目录专用的 API,使管理功能更灵活、更方便。例如,目录专用的 API 可能要求管理员在 Active Server 页上键入安全密码和域,从而将其暴露在危险之中。与此相反,ADSI 对象强制 Web 浏览器提示管理员输入这些信息。 一旦开发人员学会了 ADSI 规则,则可以方便地编写 LDAP 路径名,并指定对象的类和属性。Exchange 5.5 将弹出一个 ADSI 页,允许开发人员在相应的 Exchange Server 中键入,将其从注册表中抽出,并添加到服务器字段中。使用 ADSI 对象,他们可以开发各种使用方便的应用程序。例如,开发人员可以编写 Web 服务器脚本,允许浏览器查找不同目录中用户的详细情况; 或者创建通讯组管理器,后者在不同目录中创建用户的通讯组。或者指定打印机队列的访问特权。正是由于 ADSI 灵活多变的特点,它可获得广泛的应用。 结论 ADSI 旨在为不同种类的目录服务提供一个一致的、开放的接口集,它为当今迅猛发展的企业网络和 Intranet 打下了非常重要的基础。另外,Exchange 管理员和开发人员还可使用它编写应用程序;将基于 Exchange 目录访问编程接口 (DAPI) 的应用程序移植到 ADSI。这些应用程序将在 Exchange 5.5 环境下运行;稍作更改甚至不经更改就可以在 NT 5 Active Directory 上运行。因此,Exchange 开发人员和管理员在有效地开发支持目录的应用程序的同时,可以更方便地与更改保持同步。 其它信息 有关详细信息,请访问下列 Web 站点: ftp://ds.internic.net/internet - 草案 - 包括 LDAPV3 协议的 Internet 草案 http://www.microsoft.com/ntserver - ADSI 和 NT 5 Active Directory http://www.microsoft.com/msdn - 用于开发人员的 Microsoft 技术大全 %26copy; 1998 Microsoft 和/或其提供商。版权所有。使用条款。 第 0 位 0:在站点间复制 1:不在站点间复制 第 1 位 0:属性对于 LDAP 不可见 1:属性对于匿名的和已验证的 LDAP 客户端可见 第 2 位 0:已验证的客户不能访问属性 1:已验证的客户可以访问属性(但匿名客户不可以) 第 3 位 0:属性不是操作属性 1:属性是操作属性 第 4 位 0:属性在 Admin UI 中不可见(DS Site Configuration 对象的属性页) 1:属性在 Admin UI 中可见(DS Site Configuration 对象的属性页) Exchange 名称 Mandatory Heuristic ACL 语法 注释 Common-Name Y 2 1 String(Teletex) 公用名称(该对象的 RDN) Display Name N 2 1 String(Unicode) 地址簿所显示的字符串 Language-ISO639 N 3 2 String(Unicode) ISO639 语言 LabeledURI N 5 2 String(Unicode) 指定默认 HTML Web 页的 URL Voice-Mail-
Recorded-NameN 13 2 String(Octet) 语音邮件用户的别名 Voice-Mail-
PasswordN 13 2 String(Unicode) 代表用户帐户安全代码的 DTMF 数字 Voice-Mail-
GreetingsN 13 2 String(Unicode) 语音邮件用户所录制的问候语 Voice-Mail-
User-IDN 13 2 String(Unicode) 代表用户帐户的 DTMF 数字(如电话分机) MAPI-Recipient N 18 1 Boolean 向网关表明其是不是 MAPI 收件人(True=是,False=否) Proxy-Addresses N 18 1 String(Teletex) 该收件人的外部邮件系统的地址列表。该属性按如下方式显现:主 SMTP 地址 - 邮件主 X.400 地址 - textEncodedORAddress 其它地址 - otherMailbox Display-Name-
PrintableN 18 1 String(Printable) 此‘显示名称’的可打印字符串版本。 Mail-nickname N 18 1 String(Unicode) 邮件昵称 Comment N 18 2 String(Unicode) 该收件人在 Exchange 地址簿中的注释。 WWW-Home-
PageN 18 2 String(Unicode) 与该项相关的 WWW 主页 X509-Cert N 18 2 String(Octet) 用户的 X.509 v3 证书 Extension-
Attribute-9N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-1N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-10N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-2N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-3N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-4N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-5N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension -
Attribute -6N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-7N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-8N 20 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-15N 21 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-11N 21 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-12N 21 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute-14N 21 1 String(Unicode) 供客户使用的通用扩展属性 Extension-
Attribute- 13N 21 1 String(Unicode) 供客户使用的通用扩展属性 LDAP 名称 Exchange 名称 Mandatory Heuristic ACL 语法 注释 mail Preference Option Delivery-
MechanismY 4 1 Integer 该邮箱接收邮件所使用的机制。该属性应设置为 0。 personal Title Personal-
TitleN 3 2 String (Unicode) 称呼(先生、夫人等) Assoc- NT-
AccountAssoc- NT-
AccountN 12 1 String (Octet) 与该邮箱相关的主 NT 帐户 street Street-
AddressN 12 1 String (Unicode) 实际街道地址 generation Qualifier Generation-
QualifierN 13 1 String (Unicode) 代限制符,例如老、小、第四代等 house Identifier House- Identifier N 13 1 String (Unicode) 位于某个地点的建筑物 Company Company N 18 1 String( Unicode) 邮箱所有人所在的公司 department Department N 18 1 String(Unicode) 该收件人所在的部门。 givenName Given-Name N 18 1 String (Unicode) 指定邮箱所有人的名 international ISDNNumber International ISDN Number N 18 1 String (Numeric) 与该邮箱相关的 ISDN 号码 manager Manager N 18 1 Object (DS-DN) 该收件人的‘管理员’。 physical Delivery OfficeName Office N 18 1 String (Unicode) 例如 1/1061 sn Last Name N 18 1 String (Unicode) 指定邮箱所有人的姓 st State Or Province Name N 18 1 String (Unicode) 用户所在的州或省 teletex Terminal Identifier Teletex Terminal-
IdentifierN 18 1 String (Octet) title Title N 18 1 String (Unicode) 邮箱所有人的职务 X121-
AddressN 18 1 String (Numeric) x121 地址 Telephone-
Office2N 18 2 String (Unicode) 邮箱所有人的办公室电话号码 (2) co Text- Country N 18 2 String (Unicode) 用户所在的国家/地区 facsimile Telephone Number Telephone-
FaxN 18 2 String (Unicode) 邮箱所有人的传真号码 homephone Home phone number N 18 2 String (Unicode) 邮箱所有人的家庭电话号码 initials Initials N 18 2 String (Unicode) 用户名称的缩写 l City N 18 2 String (Unicode) 用户所在的位置/城市 mobile Mobile number N 18 2 String (Unicode) 邮箱所有人的移动电话号码 pager Pager number N 18 2 String (Unicode) 邮箱所有人的呼机号码 postal Address Address N 18 2 String (Unicode) 邮箱所有人的街道地址 postal Code Postal code N 18 2 String (Unicode) 邮政编码 secretary Assistant N 18 2 String (Unicode) 邮箱助理显示名称 telephone Number Phone number N 18 2 String (Unicode) 邮箱所有人的办公室电话号码 (1) telex Number Telex Number N 18 2 String(Octet) employee Number Employee Number N 21 1 String (Unicode) 职员编号 employee Type Employee Type N 21 1 String (Unicode) 职员类型 homeFax Telephone Home- Fax N 21 2 String (Unicode) 家庭传真号码 home Postal Address Address Home N 21 2 String (Unicode) 家庭住址 personal Mobile Telephone Personal-
MobileN 21 2 String (Unicode) 手机号码 personal Pager Telephone Personal Pager N 21 2 String (Unicode) 呼机号码 LDAP 名称 Exchange 名称 Mandatory Heuristic ACL 语法 注释 Target Address E-Mail Address Y 18 1 String (Unicode) 收件人的实际地址(该地址的格式为 <地址类型> : <值>,如 SMTP :jsmith@org. com LDAP 名称 Exchange 名称 Mandatory Heuristic ACL 语法 注释 Company Company FALSE 18 1 String (Unicode) 主要用于 AB 视图分组 department Department FALSE 18 1 String (Unicode) 主要用于 AB 视图分组 physical Delivery Office Name office FALSE 18 1 String (Unicode) 主要用于 AB 视图分组 st State-Or-
Province-
NameFALSE 18 1 String (Unicode) 主要用于 AB 视图分组 title Title FALSE 18 1 String (Unicode) 主要用于 AB 视图分组 co Text-Country FALSE 18 2 String (Unicode) 主要用于 AB 视图分组 l City FALSE 18 2 String (Unicode) 主要用于 AB 视图分组 Hide-DL-
MembershipHide- DL-
MembershipFALSE 20 1 Boolean 指出成员资格是否应对客户隐藏(默认值为 FALSE)。 owner Owner FALSE 20 1 Object(DS-DN) 拥有该通讯组的邮箱 DN。 member Members FALSE 20 2 Object(OR-Name) 通讯组成员的 DN 列表 Dim strDisplayName ' DL's Display name Dim strAliasName ' DL's Alias name Dim strDirectoryName ' DL's Directory name Dim strUserName ' User's logon name and domain Dim strPassword ' User's domain password Dim strServer ' Exchange server name Dim strOrganization ' Exchange Organization Dim strSite ' Exchange SiteDim str RecipientsPath ' ADsPath to the Recipients Container Dim strMSPrivMDBPath ' ADsPath to the MS Private MDB Dim objRecipients ' Recipients Container object Dim objMSPrivMDB ' MS Private MDB object Dim objNewDL ' new distribution list object Dim strMail ' mail address of the MS Private MDB object Dim intPos ' numeric position of the '@' in an SMTP address Dim strSMTPExt ' SMTP domain type (ie. com, org, etc...) Dim strSMTPAddr ' new DL's SMTP address Dim aOtherMailbox(1) ' other addresses created (ie. MSMail, CCMail) Dim strx400Addr ' new DL's X400 address Dim objMyIADs ' ADSI object
Const ADS_PROPERTY_UPDATE = 2
strDisplayName = "BellevueDL"
strAliasName = "BellevueDL"
strDirectoryName = "BellevueDL"
strUserName = "dc=redmond, cn=v-sparke"
strPassword = "password"
strServer = "sparker1"
strOrganization = "16"
strSite = "3081"
Set objMyIADs = GetObject("LDAP:")
objMSPrivMDB.GetInfo
strMail = objMSPrivMDB.Get("mail")
intPos = InStr(strMail, "@")
strSMTPExt = Mid(strMail, intPos, Len(strMail))
aOtherMailbox(0) = CStr("MS$" + strOrganization + "/" + strSite + "/" + strAliasName)
aOtherMailbox(1) = CStr("CCMAIL$" + strAliasName + " at " + strSite)
strx400Addr = "c=US;a= ;p=" + strOrganization + ";o=" + strSite + ";s=" + strAliasName + ";"
strRecipientsPath = "LDAP://" + strServer + "/cn=Recipients,ou=" + strSite + ",o=" + strOrganization
Set objRecipients = objMyIADs.OpenDSObject(strRecipientsPath, strUserName, strPassword, 0)
objNewDL.Put "uid", CStr(strAliasName)
objNewDL.Put "distinguishedName", CStr("cn=" + strAliasName + ",cn=Recipients,ou=" + strSite + ",o=" + strOrganization)
objNewDL.Put "mail", CStr(strSMTPAddr)
objNewDL.Put "Report-To-Originator", True
objNewDL.Put "Report-to-Owner", False
objNewDL.Put "Replication-Sensitivity", CInt(20)
objNewDL.Put "rfc822Mailbox", CStr(strSMTPAddr)
objNewDL.Put "textEncodedORaddress", CStr(strx400Addr)
objNewDL.SetInfo
Response.Write "DL Created Successfully!
"
Set objADOconn = CreateObject("ADODB.Connection")
objADOconn.Provider = "ADSDSOObject"
objADOconn.Open "ADs Provider"
strADOQueryString = "
Set objRS = objADOconn.Execute(strADOQueryString)
If Not objRS.EOF Then
While Not objRS.EOF
objNewDL.Add objRS.Fields(1).Value
Response.Write objRS.Fields(0) + " added :)
"
objRS.MoveNext
Wend
Else
Response.Write "No mailboxes were added to the DL :(
"
End If
objRS.Close
Phone List
strAT = Request.ServerVariables("AUTH_TYPE")
If InStr(1, "_BasicNTLM", strAT, 1) < 2 Then
Response.Buffer = True
Response.Status = ("401 Unauthorized")
Response.End
End If
Dim strMailboxPath' ADsPath to the user's mailboxDim strServer' name of the Exchange 5.5 serverDim intPosPrefix' numeric index used used to build ADsPath to schema objectDim intPosSuffix' numeric index used used to build ADsPath to schema objectDim strPrefix' prefix string used to build ADsPath to schema objectDim strSuffix' suffix string used to build ADsPath to schema objectDim strPathToSchemaObject' ADsPath to the schema objectDim objMailbox' mailbox objectDim strNewPoneNumber' value of the new phone number
Function isUserEditable(strSchemaObjectPath)
Dim objSchemaObject' schema objectDim intValue' value of the 'Access-Category' propertySet objSchemaObject = GetObject(strSchemaObjectPath)intValue = objSchemaObject.Get("Access-Category")If intValue = 2 Then' user may modify the mailbox propertyisUserEditable = TrueElse' the value was 0, 1, or 3 isUserEditable = False
End If
End Function
On Error Resume Next
If Len(strNewValue) <> 0 Then
objMailbox.Put strADsProperty, CStr(strNewValue)
Else ' The new value is empty
objIADs.Get (strADsProperty)
'If the property doesn't exist on the object, an error will be generated using the Get method:
If Err.Number = 0 Then' the property exists on the object and must be removed objMailbox.PutEx ADS_PROPERTY_CLEAR, strADsProperty, CStr(" ")
End If
Err.Clear
End If
End Sub
Const ADS_PROPERTY_CLEAR = 1' used by the PutEx method to clear a property from an objectstrMailboxPath = "LDAP://SPARKER1/cn=SParker,cn=Recipients,ou=3081,o=16"
strServer = "sparker1"
strNewPoneNumber = "(425) 882-8080 x 13882"
intPosPrefix = InStr(strMailboxPath, "/cn")
intPosSuffix = InStr(strMailboxPath, "ou")
strPrefix = Mid(strMailboxPath, 1, intPosPrefix - 1) + "/cn="
strSuffix = ",cn=Microsoft DMD," + Mid(strMailboxPath, intPosSuffix, Len(strMailboxPath))
strPathToSchemaObject = strPrefix + "Telephone-Office1" + strSuffix
If isUserEditable(strPathToSchemaObject) Then
Set objMailbox = GetObject(strMailboxPath)
ModifyProperty strNewPoneNumber, "telephoneNumber"
objMailbox.SetInfo ' save the object information
Response.Write "Phone number modified successfully :)
"
Else
Response.Write "You don't have permissions to modify your phone number :(
"
End If
%>
更多内容请看PCdog.com--Exchange服务器 微软邮件服务器专题
