检查DirectoryEntry在DirectorySearcher中是否有效

时间:2014-09-03 21:06:45

标签: c# ldap directorysearcher

我正在尝试在新域和新域控制器上搜索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.";
    }

1 个答案:

答案 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。

http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher%28v=vs.110%29.aspx