给定一个 DirectoryEntry,我怎样才能得到 Forest 对象?

Given a DirectoryEntry, how can I get the Forest object?

假设我想实现一个扩展方法,允许我为每个 DirectoryEntry 对象获取 Forest 对象。

我的骨架代码:

public static Forest GetForest(DirectoryEntry de) {
    string forestDnsName = //DoSomethingWith(de.Path); ?
    DirectoryContext context = new DirectoryContext(DirectoryContextType.Forest, forestDnsName);
    return Forest.GetForest(context)
}

但我不确定如何获得森林。有谁知道怎么弄吗?

没有示例代码,只有一些通用步骤:

  1. 获取 "distinguishedname" 属性。
  2. 从 DN
  3. 中获取 "DC=xxx,DC=yyy" 段
  4. 将以上转换为域名 (删除所有 "DC=",然后将“,”替换为“.”)
  5. 连接到 LDAP://[域名]/RootDSE
  6. 阅读"rootDomainNamingContext"
  7. 通过重复步骤 3 转换为林名称
  8. 您已经知道如何从林名称创建 Forest 对象

如果你会多次调用这个扩展方法,你可以建立一个域名到Forest对象映射以减少AD流量(跳过步骤4 - 7)。