查找组织单位用户在Active Directory中具有子节点

时间:2014-04-08 01:31:42

标签: c# active-directory

我需要找出OrganisationUnit是否有节点用户。 以下是ActiveDirectory的示例。

enter image description here

例如 OU = AHSC 有子节点 OU =用户 然后我想复制OU = Users的对象名称,如下所示 - OU = Users,OU = AHSC,DC = sf,DC = sp,DC = edu,DC = sg

我希望所有 OU 都有子节点 OU =用户

我尝试使用 DirectorySearcher 来实现,我能够在AD中读取整个数据,但我只希望OU具有子节点 OU =用户

希望我很清楚。

1 个答案:

答案 0 :(得分:1)

此方法不关心对象类是什么,并且将用于验证用户,OU,组等。它只是验证dn是合法的。

public static bool Exists(string dn)
{
    var domain = "sf.sp.edu.sg";
    var ldapSearchFilter = "(objectClass=*)";
    SearchResponse response = null;

    using (var connection = new LdapConnection(domain))
    {
        try
        {               
            var request = new SearchRequest();
            request.Filter = ldapSearchFilter;
            //dn = OU=Users,OU=AHSC,DC=sf,DC=sp,DC=edu,DC=sg for this example
            request.DistinguishedName = dn;
            request.Scope = SearchScope.Base;

            response = (SearchResponse)connection.SendRequest(request);
        }
        catch (Exception ex)
        {
            //handle errors here
        }

    }
    return (response.Entries.Count > 0);
}

在发布之后意识到您希望所有OU都与用户一起使用。不确定是否需要所有对象或只是名称,但这里是如何获得这些OU的所有dns

var ds = new DirectorySearcher();
ds.Filter = "(&(objectClass=organizationalUnit)(ou=Users))";
ds.PropertiesToLoad.Add("distinguishedName");
ds.SearchScope = System.DirectoryServices.SearchScope.Subtree;

ds.FindAll();

var dnList = new List<string>();
foreach (SearchResult ou in ous)
{
    dnList.Add(ou.Properties["distinguishedName"][0].ToString());
}