2014-04-29 99 views
0

我正在嘗試搜索基於全名'LAST,FIRST MIDDLEINITIAL'的活動目錄問題是,這些是AD中的三個獨立字段,但我只有一個字符串進行搜索。有沒有一種方法,使用活動目錄來搜索類似於在SQL中可以完成的組合字段? EX在SQL:ActiveDirectory全名搜索

SELECT * FROM tbltest WHERE (Last + ',' + First + ' ' + MiddleI) = 'LAST,FIRST MIDDLEI' 

類似下面在Active Directory中或許?:

"(sn+','+givenname+' '+initials = LAST,FIRST MIDDLEI)" 
+0

按名稱搜索AD通常是一個壞主意,它完全是任意的。你所有的用戶都可以有不同的名稱字段,或者所有的用戶名都可以。我建議你是否可以使用AD中的一個自定義字段來存儲每個人的獨特信息,比如員工ID。 – Ashigore

+0

@Ashigore我通常不會進行名稱搜索,但在這種情況下,我所有的都是'最後,第一中間',所以我不得不按名稱搜索。 – steventnorris

回答

0

如果您使用的AccountManagement(http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement%28v=vs.110%29.aspx)命名空間,你可以這樣做:

using (var context = new PrincipalContext(ContextType.Domain, FQDC)) 
{ 
    UserPrincipal up = new UserPrincipal(context); 

    up.GivenName = First; 
    up.MiddleName = MiddleI; 
    up.Surname = Last; 

    PrincipalSearcher ps = new PrincipalSearcher(); 
    ps.QueryFilter = up; 

    PrincipalSearchResult<Principal> results = ps.FindOne(); 

    if (results != null) ... 
} 

如果您使用SDS與DirectorySearcher說你可以設置過濾器屬性:

searcher.Filter = string.Format("(&(objectclass=user)(lastname={0})(firstname={1})(middlename={2}))", Last, First, MiddleI); 
+0

這似乎將名稱分爲三個字段,第一個,中間和最後一個。我想搜索,就好像他們是一個提交'最後,第一中間' – steventnorris

+0

除非你在其他屬性(如DisplayName)中存儲這樣的名稱,那麼你將無法以這種方式進行搜索。 – codingChris

+0

謝謝。我希望這不是答案,但我想我們並不總是得到我們想要的。 – steventnorris