我正在运行测试Active目录,并尝试使用ldap进行查询。我创建了一个searchrequest对象,其distingueshed名称为空,并且过滤器会抛出noSuchObject错误代码并显示“对象不存在”消息。我只是从我的测试AD得到这个,如果我使用我公司的生产广告我没有得到例外,只是一个没有命中的响应。在测试AD中我需要更改什么才能看到类似的行为?
答案 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搜索
在您的情况下,当您的ADSI层能够找到默认域时,它可以正常工作。所以我认为你必须创建一个真正的LDAP-SEARCH请求,也许还要提供凭据。
答案 2 :(得分:0)
感谢其他答案。我通过使用GC端口3268而不是连接中的DC端口389解决了我的问题。