在SearchRequest中无法使用专有名称查询AD?

时间:2011-07-05 23:57:30

标签: c# active-directory distinguishedname

我正在运行测试Active目录,并尝试使用ldap进行查询。我创建了一个searchrequest对象,其distingueshed名称为空,并且过滤器会抛出noSuchObject错误代码并显示“对象不存在”消息。我只是从我的测试AD得到这个,如果我使用我公司的生产广告我没有得到例外,只是一个没有命中的响应。在测试AD中我需要更改什么才能看到类似的行为?

3 个答案:

答案 0 :(得分:0)

您可以使用PrincipalSearcher和“按示例查询”主体进行搜索:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a UserPrincipal 
// and with specified last name (surname)
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.Surname = "Willis";

// 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

中的新功能

当然,根据您的需要,您可能希望在您创建的“按示例查询”用户主体上指定其他属性:

  • Surname(或姓氏)
  • DisplayName(通常:名字+空格+姓氏)
  • SAM Account Name - 您的Windows / AD帐户名称
  • User Principal Name - 您的“username@yourcompany.com”样式名称

您可以在UserPrincipal上指定任何属性,并将其用作PrincipalSearcher的“按示例查询”。

答案 1 :(得分:0)

@marc_s通过给你一种搜索方式回答

回到你的问题,回忆一下:

LDAP搜索

  1. 您要求开始搜索的点头(在您的情况下是您的OU的DN)
  2. 搜索范围(基数,单级,子树)
  3. 搜索过滤器((objectClass = group))
  4. 您要撤消的属性
  5. 在您的情况下,当您的ADSI层能够找到默认域时,它可以正常工作。所以我认为你必须创建一个真正的LDAP-SEARCH请求,也许还要提供凭据。

答案 2 :(得分:0)

感谢其他答案。我通过使用GC端口3268而不是连接中的DC端口389解决了我的问题。