我想找到所有在某一OU的組的成員的用戶,所以我的過濾器會是這個樣子:LDAP的DirectorySearcher用的memberOf屬性
(&(objectClass的=用戶)(的memberOf = * OU = something,OU = yep,DC = dev,DC = local))
有沒有辦法在memberof屬性上使用通配符運行directorysearcher?
我想找到所有在某一OU的組的成員的用戶,所以我的過濾器會是這個樣子:LDAP的DirectorySearcher用的memberOf屬性
(&(objectClass的=用戶)(的memberOf = * OU = something,OU = yep,DC = dev,DC = local))
有沒有辦法在memberof屬性上使用通配符運行directorysearcher?
請勿指定memberOf子句。
請勿指定memberOf
子句。只需使用"(objectClass=user)"
您需要設置OU您要搜索作爲您的DirectorySearcher根:
DirectoryEntry myOU = new DirectoryEntry("OU=something,OU=yep,DC=dev,DC=local");
DirectorySearcher srch = new DirectorySearcher(myOU);
srch.SearchScope = SearchScope.Subtree;
,然後只使用objectCategory =人對你的過濾器 - 我會用objectCategory是單-valued和索引,從而快速,而不是對象類(這是多值和沒有索引):
srch.Filter = "(objectCategory=person)";
如果你仍然想除了檢查會員組中,以作爲OU的一部分,您可以將此添加爲成員部分過濾器:
srch.Filter = "(&(objectCategory=person)(memberOf=cn=Group,ou=yep,dc=dev,dc=local))";
不能完全確定有關通配符 - 一般來說,LDAP搜索過濾器做支持通配符,但我有點猶豫的RDN使用通配符這樣的組DN在這裏。
馬克
據this thread,對於DNS通配符搜索在Active Directory中不支持。
這裏是我是如何做到這 是LDAP名 是,你需要會員
DirectoryEntry entry = new DirectoryEntry("LDAP://<COMPANYLDAP>/CN=<Group Name>,OU=something,OU=yep,DC=dev,DC=local");
DirectorySearcher Dsearch = new DirectorySearcher(entry);
SearchResult sResultSet = Dsearch.FindOne();
GetProperty(sResultSet, "member");
public static void GetProperty(SearchResult searchResult, string PropertyName)
{
StringBuilder strb = new StringBuilder();
if (searchResult.Properties.Contains(PropertyName))
{
ResultPropertyValueCollection rc = searchResult.Properties[PropertyName];
foreach (string name in rc)
{
DirectoryEntry entry = new DirectoryEntry("LDAP://<COMPANYLDAP>/" + name);
DirectorySearcher Dsearch = new DirectorySearcher(entry);
//Dsearch.Filter = name;
SearchResult sResultSet = Dsearch.FindOne();
strb.AppendLine(GetPropertyvalue(sResultSet, "displayname") + "," + GetPropertyvalue(sResultSet, "mail"));
}
}
File.WriteAllText(strb.ToString(), "c:\\Users.txt");
}
組