我需要找出OrganisationUnit是否有节点用户。 以下是ActiveDirectory的示例。
例如 OU = AHSC 有子节点 OU =用户 然后我想复制OU = Users的对象名称,如下所示 - OU = Users,OU = AHSC,DC = sf,DC = sp,DC = edu,DC = sg
我希望所有 OU 都有子节点 OU =用户
我尝试使用 DirectorySearcher 来实现,我能够在AD中读取整个数据,但我只希望OU具有子节点 OU =用户。
希望我很清楚。
答案 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());
}