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);