我无法从LDAP显示某些用户。我不知道为什么。这是我的代码
try
{
string path = "LDAP://" + Program.domain;
DirectoryEntry dEntry = new DirectoryEntry(path);
DirectorySearcher dSearcher = new DirectorySearcher(dEntry);
dSearcher.Filter = "(&(objectClass=user)(objectCategory=person))";
//perform search on active directory
sResults = dSearcher.FindAll();
//loop through results of search
foreach (SearchResult searchResult in sResults)
{
//string view = searchResult.Properties["samaccountname"][0].ToString();
// Console.WriteLine(searchResult.Properties["userprincipalname"][0].ToString());
if (searchResult.Properties["samaccountname"][0].ToString() == Program.username)
{
Console.WriteLine("**********UserDetails******************");
foreach (Object propertyName in searchResult.Properties.PropertyNames)
{
ResultPropertyValueCollection valueCollection =
searchResult.Properties[(string)propertyName];
foreach (Object propertyvalue in valueCollection)
{
Console.WriteLine((string)propertyName + " : " + propertyvalue);
result = true;
}
}
Console.WriteLine("************************************");
}
}
这显示的用户很少,但AD中存在的其他用户很少。 他们也是域管理员和域用户。我还没有看到任何许可问题...... 我真的需要一些帮助。有人可以帮帮我吗?
由于
答案 0 :(得分:0)
有两个可能的原因:
0)访问控制:您没有适当的访问级别来查看有问题的对象(或者在过滤器中匹配它们所需的属性(无论是objectClass
还是objectCategory
))
1)有问题的目标对象实际上与指定的过滤器不匹配。用户可以是(&(objectClass=user)(objectCategory=person))
以外的其他用户。
我的建议是按如下方式解决问题:
0)取一个您希望匹配的样本用户并仔细检查。检查以确保objectClass确实包含user和objectCategory设置为person。如果没有,请修改您的查询以包含您尝试查找的所有用户。 (您可以参考AD模式来查看这些事物之间的关系)
1)确保您正在进行查询的上下文可以访问您要查找的所有对象,包括您在过滤器中使用的属性。如果您无权访问过滤器中的所有属性,则AD不会返回查询匹配...如果确实如此,则它将是信息泄露的一种形式。