2014-09-03 112 views
0

我試圖在我們的網絡最近擴展時在新域和新域控制器上搜索AD。我在下面指定的域是Web服務器加入的域。我將這個稱爲domainA,它可以正常工作。當我將其更改爲domainB時,它總是返回來自domainA的結果。我可以在DirectorySeracher()中放入新域名條目,甚至是任何字符串,例如「blahblahblah」,並返回DomainA的結果。如果它找不到我指定的域,它是否會回退到Web服務器以某種方式加入的域?我沒有收到任何錯誤,只是來自錯誤域的結果。檢查DirectoryEntry在DirectorySearcher中是否有效

 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

說真的,我可以把的DirectorySearcher( 「blahblahblah」);並沒有錯誤,爲什麼不呢? – user1633947 2014-09-04 14:10:35

回答

1

您使用DirectorySearcher(string)實際上是期待過濾器的構造,而不是搜索的根路徑。

DirectorySearcher dssearch = new DirectorySearcher("LDAP://CN=users,DC=LAZARUS,DC=COM"); 

而且在第二行,你覆蓋

dssearch.Filter = "(&(objectClass=user)(sAMAccountName=" + txtusername.Text + "))"; 

所以任何你傳遞給構造函數的過濾器的值沒有任何效果可言。

DirectorySearcher的搜索根目錄必須作爲DirectoryEntry傳遞。 您可以在以下鏈接中選擇最適合的ctor。

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