在我的开发机器上,我有一系列VM。其中一个是域控制器。域控制器确实正在工作,因为我无法在没有对其进行身份验证的情况下登录到其他VM。
我正在尝试针对此DC测试LDAP查询并且它一直失败
我的域控制器树看起来像:
= ESDEV-DC01
ESDEV.COM
ESDEV.COM/Users
我的潜力目标看起来像:
我的参数是:
"LDAP://OU=Users, DC=ESDEV-DC01,DC=ESDEV,DC=Com"
"(&(objectCategory=Person))"
问题:
我一直在“服务器上没有这样的对象”。
MY CONSOLE APP代码看起来像:
我认为我的问题可以在没有这篇文章的情况下得到解答,但对于那些关心我用来测试查询的代码的人来说......
namespace LDAPQueryTester
{
class Program
{
static void Main(string[] args)
{
try
{
string directoryPath = ConfigurationManager.AppSettings["DirectoryPath"];
string searchFilter = ConfigurationManager.AppSettings["SearchFilter"];
DirectoryEntry rootEntry = new DirectoryEntry(directoryPath);
DirectorySearcher srch = new DirectorySearcher(rootEntry);
srch.SearchScope = SearchScope.Subtree;
if (searchFilter.Length > 0)
{
srch.Filter = searchFilter;
}
SearchResultCollection res = srch.FindAll();
if (res.Count <= 0)
{
Console.WriteLine("Your query did NOT return results");
}
else
{
Console.WriteLine("Your query returned results");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
Console.ReadLine();
}
}
}
答案 0 :(得分:2)
据我记忆,Users
是一个通用容器 - 而不是OU - 所以你应该尝试这个LDAP路径:
LDAP://CN=Users,DC=ESDEV-DC01,DC=ESDEV,DC=Com
注意:CN=Users
而不是OU=Users
。
LDAP
前缀必须全部为大写
但如果您使用的是.NET 3.5或更高版本,我建议您查看新的System.DirectoryServices.AccountManagement
命名空间,它可以使很多东西更容易使用!
您可以使用PrincipalSearcher
和“按示例查询”主体进行搜索:
// create your domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "ESDEV.COM", "CN=Users, DC=ESDEV-DC01,DC=ESDEV,DC=Com"))
{
// define a "query-by-example" principal - here, we search for a UserPrincipal
UserPrincipal qbeUser = new UserPrincipal(ctx);
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer.....
}
}
如果您还没有 - 绝对阅读MSDN文章Managing Directory Security Principals in the .NET Framework 3.5,该文章很好地展示了如何充分利用System.DirectoryServices.AccountManagement
中的新功能。或者查看MSDN documentation on the System.DirectoryServices.AccountManagement命名空间。