C# 获取Active Directory中组织单位的父组织单位(如果有)

C# 获取Active Directory中组织单位的父组织单位(如果有),c#,active-directory,directoryservices,C#,Active Directory,Directoryservices,我创建了一个小实体类: public class OrganizationalUnit { public string Name { get; set; } public string ParentUO { get; set; } public string Path { get; set; } } 以下是我如何创建这种类型的对象: /// <summary> /// Provides an object that allows yo

我创建了一个小实体类:

public class OrganizationalUnit
{
    public string Name { get; set; }
    public string ParentUO { get; set; }
    public string Path { get; set; }    
}
以下是我如何创建这种类型的对象:

    /// <summary>
    /// Provides an object that allows you to get organizational units within an 
    /// active directory domain.
    /// </summary>
    /// <param name="connectionString">The LDAP connection string to a domain. 
    /// For example LDAP://DC=YourCompany,DC=com</param>
    public ActiveDirectoryOrganizationalUnitRepository(string connectionString, string username, string password)
    {
        organizationalUnits = new List<OrganizationalUnit>();

        if (DomainExists(connectionString))
        {
            var baseDirectory = new DirectoryEntry(connectionString);
            baseDirectory.Username = username;
            baseDirectory.Password = password;

            DirectorySearcher searcher = new DirectorySearcher();
            searcher.SearchRoot = baseDirectory;
            searcher.Filter = "(objectCategory=organizationalUnit)";
            searcher.SearchScope = SearchScope.Subtree;

            var ouResults = searcher.FindAll();

            foreach (SearchResult ou in ouResults)
            {
                organizationalUnits.Add(new OrganizationalUnit() { 
                                        Path = ou.Path, 
                                        Name = ou.Properties["name"][0].ToString(),
                                        ParentUO = ou.Properties["parent"][0].ToString()}
                );                    
            }
        }        
    }
这意味着,没有名为“parent”的属性


有什么建议吗?我还想找到一个现有属性列表,但我还没有在线找到。

我找到了这段代码,其中列出了SearchResult对象可能具有的所有属性。它似乎没有列出它的上级组织单位

DirectorySearcher searcher = new DirectorySearcher();

searcher.SearchRoot = baseDirectory;
searcher.Filter = "(objectCategory=organizationalUnit)";
searcher.SearchScope = SearchScope.Subtree;

var ouResults = searcher.FindAll();

foreach (SearchResult ou in ouResults)
{

    ResultPropertyCollection myResultPropColl;
    myResultPropColl = ou.Properties;
    Console.WriteLine("The properties of the " +
            "'mySearchResult' are :");

    foreach (string myKey in myResultPropColl.PropertyNames)
    {
        string tab = "    ";
        Console.WriteLine(myKey + " = ");
        foreach (Object myCollection in myResultPropColl[myKey])
        {
            Console.WriteLine(tab + myCollection);
        }
    }
}
你试过了吗

下面的代码应该可以工作,但我没有尝试

organizationalUnits.Add(new OrganizationalUnit() { 
                                    Path = ou.Path, 
                                    Name = ou.Properties["name"][0].ToString(),
                                    ParentUO = ou.GetDirectoryEntry().Parent.Path}
organizationUnit类对象上没有名为“Parent”的属性。请检查组织单位的所有属性。

首先: 从vue的纯目录角度来看,您的组织单元(OU)中有一个名为“
discriminatedname
”的属性,它看起来像:

OU=currentOU,OU=parentOU,...,DC=domain,DC=..
因此,您可以轻松地计算父OU的字符串

秒: 从编程的角度来看,您有一个
DirectoryEntry
类的属性,它是
parent
。下面是一个示例代码

String myADSPath = "LDAP://onecity/CN=user,CN=Users,DC=onecity,DC=corp,DC=fabrikam,DC=com";
DirectoryEntry myDirectoryEntry=new DirectoryEntry(myADSPath, UserName, SecurelyStoredPassword);

Console.WriteLine("Parent is :"+myDirectoryEntry.Parent.Path);
太平绅士

String myADSPath = "LDAP://onecity/CN=user,CN=Users,DC=onecity,DC=corp,DC=fabrikam,DC=com";
DirectoryEntry myDirectoryEntry=new DirectoryEntry(myADSPath, UserName, SecurelyStoredPassword);

Console.WriteLine("Parent is :"+myDirectoryEntry.Parent.Path);