我正在尝试在新域和新域控制器上搜索AD,因为我们的网络最近已经扩展。我在下面指定的域是Web服务器加入的域。我将其称为domainA,它可以正常工作。当我将其更改为domainB时,它似乎始终返回domainA的结果。我可以把新的域名条目,甚至任何字符串,如" blahblahblah"在DirectorySeracher()中,它返回DomainA的结果。如果它无法找到我指定的域,它是否会回归到Web服务器加入的域?我没有收到任何错误,只是来自错误域名的结果。
DirectorySearcher dssearch = new DirectorySearcher("LDAP://CN=users,DC=LAZARUS,DC=COM");
dssearch.Filter = "(&(objectClass=user)(sAMAccountName=" + txtusername.Text + "))";
SearchResult sresult = dssearch.FindOne();
if ( sresult != null ){
lblStatus.Visible = false;
DirectoryEntry dsresult = sresult.GetDirectoryEntry();
lblfname.Text = dsresult.Properties["givenName"][0].ToString();
lbllname.Text = dsresult.Properties["sn"][0].ToString();
lblTitle.Text = dsresult.Properties["description"][0].ToString();
lblHire.Text = dsresult.Properties["whencreated"][0].ToString();
pnlForm.Visible = false;
pnlResults.Visible = true;
btnReset.Visible = true;
}else{
lblStatus.Visible = true;
lblStatus.Text = "User not found.";
}
答案 0 :(得分:1)
您使用的构造函数DirectorySearcher(string)
实际上是期望过滤器,而不是搜索根路径。
DirectorySearcher dssearch = new DirectorySearcher("LDAP://CN=users,DC=LAZARUS,DC=COM");
在第二行中,您将覆盖过滤器的值
dssearch.Filter = "(&(objectClass=user)(sAMAccountName=" + txtusername.Text + "))";
所以你传给ctor的任何东西都没有效果。
DirectorySearcher
的搜索根必须作为DirectoryEntry
传递。
您可以在以下链接中选择最合适的ctor。