我对 Active Directory 执行查询,该查询可以返回用户和组。
(&(|(&(objectCategory=person)(objectClass=user))(objectCLass=group))(...))
但是当我尝试从结果集中获取 objectClass 属性时,我会得到 "top"
DirectorySearcher searcher = new DirectorySearcher(baseDirEntry);
searcher.Filter = "(&(|(&(objectCategory=person)(objectClass=user))(objectCLass=group))(|(sAMAccountName=*{0}*)(displayName=*{0}*)(email=*{0}*)))";
//other props
searcher.PropertiesToLoad.Add(AdProperties.OBJECTCLASS);
SearchResultCollection userResult = searcher.FindAll();
foreach (SearchResult rs in userResult)
{
string objectClass = GetProp(rs, AdProperties.OBJECTCLASS);//returns "top" every time
}
如何确定 AD 对象是用户还是组?
编辑 ObjectCategory 属性返回一个专有名称,例如
CN=Person(or Group),CN=Schema,CN=Configuration,DC=...,DC=...,DC=...
所以我可以解析字符串并获取第一个 CN 值,但这看起来不是最好的方法。
最佳答案
我认为问题可能出在您的 GetProp
方法中:objectClass 是一个多值属性,并且可能在 GetProp
中您只返回第一个值,即总是“顶”。
如果是这种情况,您还应该检查其他值。
否则,能否请您发布 GetProp
的实现?
关于C# ActiveDirectory - 检查对象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32518416/