我使用以下代码使用DirectorySearcher
查询AD以获取用户的所有AD组。
List<string> Groups = new List<string>();
//initialize the directory entry object
DirectoryEntry dirEntry = new DirectoryEntry(ldapPath);
//directory searcher
DirectorySearcher dirSearcher = new DirectorySearcher(dirEntry);
//enter the filter
dirSearcher.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", username);
//get the member of properties for the search result
dirSearcher.PropertiesToLoad.Add("memberOf");
int propCount;
SearchResult dirSearchResults = dirSearcher.FindOne();
propCount = dirSearchResults.Properties["memberOf"].Count;
string dn;
int equalsIndex;
int commaIndex;
for (int i = 0; i <= propCount - 1; i++)
{
dn = dirSearchResults.Properties["memberOf"][i].ToString();
equalsIndex = dn.IndexOf("=", 1);
commaIndex = dn.IndexOf(",", 1);
if (equalsIndex == -1)
{
return null;
}
if (!Groups.Contains(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)))
{
Groups.Add(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1));
}
}
return Groups;
但是当我在AD中检查用户的'memberof'选项卡时,我还有一个“Domain Users”组,我没有通过此代码。
有什么想法吗?为什么我没有在'memberof'集合中获得'域用户'?
答案 0 :(得分:3)
群组可以是其他群组的成员。也许您的用户不是直接成员,而只是间接成员?
在检索AD上的组时,我也会为子组重复所有组。
请注意,您可能会获得无限的递归,因为群组可以(间接地)相互包含。我很难找到这个:-(现在我记得“全局”列表中的每个处理组只处理一次以避免这种情况。)
我写了一个CodeProject article和一些通用库,它们也包含AD类。 (请参阅下载的ZIP文件中“/Tools/DirectoryServices/
”子文件夹中的类。
答案 1 :(得分:0)
这是旧的,但对于其他任何人进行搜索,缺少属性成员的原因&#34;域用户&#34;是因为那是AD对象的主要组。要查找用户的主要群组,您需要: