这是构造AD组织结构(Organizational Unit,以下称为OU)的树形结构的另一个方法。之前的方法请参见:递归构造AD组织结构(Organizational Unit)的树形结构
需要引用两个dll:
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
定义一个树节点类:
public class OuTreeNode
{
public string Name { get; set; }
public string Id { get; set; }
private List<OuTreeNode> _children = new List<OuTreeNode>();
public List<OuTreeNode> Children
{
get { return _children; }
set { _children = value; }
}
}
这个类的名字是OuTreeNode,其中保存OU节点的基本信息,这里定义了OU的name,id,和子节点的列表。
与之前递归查找OU的方法不同,这个方法使用查询,一次查询出所有的OU,然后遍历这些OU就可以构造出一棵组织结构树。基本的思路是,利用OU对象的distinguishedName构造出一个OU相对于根节点的相对路径,这个路径正好可以作为一个xml表的xpath,根据这个xpath,就可以构造一个xml,最后通过xml表递归构造OU树。这是对xml查询的反向应用,一般都是给定一个xml表,使用xpath查询其中的节点,这次是使用xpath,构造一个xml表。
首先我们需要一个方法,将一个OU的distinguishedName转换成相对路径:
private static string FormatDNToRelativePath(string rawDn)
{
StringBuilder path = new StringBuilder();
rawDn = rawDn.Replace(" ", "_").Replace("&", "_");
strin