2014-04-29 2 views
0

'LAST, FIRST MIDDLEINITIAL'의 전체 이름을 기반으로 활성 디렉토리를 검색하려고합니다. 문제는 이것들이 AD의 세 개의 별도 필드이지만 검색 할 문자열이 하나 뿐이라는 것입니다. 활성 디렉토리를 사용하여 SQL에서 수행 할 수있는 것과 유사한 결합 된 필드를 검색하는 방법이 있습니까? SQL에서 예 : 아마도 액티브 디렉토리?에서 다음과 같은전체 이름이 ActiveDirectory 검색

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

뭔가

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

이름으로 AD를 검색하는 것은 일반적으로 좋지 않은 아이디어이며 완전히 임의적입니다. 모든 사용자는 다른 이름 필드를 가질 수 있으며 이름이 모두 동일하거나 전혀 없을 수 있습니다. 광고에서 맞춤 입력란 중 하나를 사용하여 직원 ID와 같이 각 개인에 대해 고유 한 항목을 저장할 수 있는지 제안합니다. – Ashigore

+0

@Ashigore 일반적으로 이름 검색을하지는 않지만이 경우에는 'LAST, FIRST MIDDLE'이므로 이름으로 검색해야합니다. – 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) ... 
} 

DirectorySearcher와 함께 SDS를 사용하는 경우 필터 속성을 설정하면됩니다.

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

이것은 이름을 세 개의 필드, 첫 번째, 중간, 마지막으로 나눈 것으로 보입니다. 나는 그들이 마치 하나의 'LAST, FIRST MIDDLE'처럼 검색하려고합니다. – steventnorris

+0

다른 속성 (예 : DisplayName)에 이름을 저장하지 않는 한 그 방법으로 검색 할 수 없습니다. – codingChris

+0

감사합니다. 그게 답이 아니길 바랐지만, 우리가 원하는 것을 항상 얻지는 않는다고 생각합니다. – steventnorris