使用 ADSI 扩展的好处

实现扩展方法的方式取决于扩展编写器。 扩展编写器甚至可完全在目录范围之外实现某一方法。 例如,备份与还原软件计划的开发人员计划扩展名为 computer 的对象。 开发人员必须创建两个方法:BackUpRestore。 这些方法会在此目录中的 computer 对象所指向的物理计算机上远程运行。 通过充当扩展,该组件会访问 ADSI 基础结构,并被 ADSI 客户端视为该对象的一部分。

以下场景描述了创建 ADSI 扩展可带来好处的情况:

  • 创建扩展以将组件与目录对象集成。 由于目录中存在 user 对象,HR 开发人员可能希望创建一个 ADSI 扩展,而该扩展会在创建 user 时填充此目录中的其他数据。

  • 如果组件需进行目录查找,则应创建扩展。 组件可能需将目录作为查找的起点。 例如,创建新的应用程序时。 可在此目录中发布应用程序对象 ToolApp。 应用程序可能支持针对一系列邮件服务器的状态通知。 你决定将此应用程序变为 ADSI 扩展。

    现在,用户可在此目录中搜索 ToolApp 的所有实例。 对于返回的每个对象,用户均可能会发出对 NotifyNow() 的调用。 应用程序或扩展可在此目录中获取更多当前对象数据,并异步通知每个服务器。

  • 创建扩展以将其作为命名空间与编程模型之间的交接点。 例如,ISV 为打印服务创建了一个新的对象模型。 printQueue 对象已在此目录中定义。 ISV 可创建 ADSI 扩展并将其与 printQueue 对象关联。 ADSI 用户可绑定到 printQueue 对象,并将该对象模型用于 ISV。 从 ADSI 客户端的角度来看,此交接点为透明状态。

  • 创建扩展以简化任务。 目录中的很多任务均可通过在某一对象或多个对象中搜索和设置多个属性来实现。 通过创建单个函数来操作多个属性,它可简化应用程序和脚本编写器的开发工作。

对于 ADSI 客户端,扩展可通过多种方式增强 ADSI 编程环境:

  • 创建 ADSI 客户端的开发人员无需学习新的编程模型。 扩展是 ADSI 的一部分。 它们使用同一范例来执行搜索、数据操作和对象保护。
  • 管理员可使用扩展来管理支持目录的相关应用程序。
  • 扩展使用者可将 ADSI 对象和扩展视为一个集成对象。
  • 现有组件可与 ADSI 集成,以便扩展可利用现有投资并在各组件之间形成协同作用。

ADSI 扩展的设计目标如下:

  • 易于实现。 借助当前现有的 Microsoft 技术、Microsoft Visual C++ 开发系统和活动模板库,可快速创建扩展。
  • 客户端会看到一个 IDispatch。 从脚本和自动化编写器的角度来看,扩展方法和属性会透明地混合到一个 ADSI 对象中。
  • 独立。 扩展编写器可独立扩展 ADSI,而无需事先了解现有扩展。

以此场景为例:企业开发人员或 ISV 需制定一个备份计划。 此备份应用程序可让管理员备份组织单位中的所有计算机。 借助 ADSI 扩展,便可编写以下脚本。

Dim ou
On Error Resume Next
Set ou = GetObject("LDAP://OU=Sales, DC=Fabrikam, DC=COM")
If Err.Number<>0 Then
    MsgBox("An error has occurred.")
    Err.Clear
    Set ou = Nothing
    Exit Sub
End If

ou.Filter = Array("computer")

For each comp in ou
   Debug.Print comp.Get("networkAddress")
   Debug.Print comp.LastBackUp
   comp.BackUpNow
Next

LastBackUp 为一个属性,而 BackUpNow 则是扩展编写器提供的一个方法。 该代码显示了为扩展使用者和提供程序带来的好处。 扩展编写器无需创建新的筛选、搜索和目录访问方式。 扩展使用者无需重新学习新的编程范例。 扩展编写器提供的新方法与属性均被视为 ADSI 的一部分。