2012-02-23 3 views
2

특정 사용자 만 "sAMAAccountName"필드를 알 필요가 있습니다.Active Directory (AD)의 OU를 모른 채 특정 특성으로 특정 사용자를 얻을 수 있습니까?

것은,이 특정 사용자가 여러 그룹의 내부가 될 수있다 :

OU=ThirdParty 
    OU=Company1 
     CN=User1 
     CN=User2 
     CN=User3 
    OU=Company2 
     CN=User1 
     CN=User2 
     CN=User3 

자신의 그룹을 알고하지 않은 사용자를 얻을 수있는 방법은 그들 만이 가지고 하나 개의 속성을 사용하여이 있습니까?

내 코드 :

DirectorySearcher search = new DirectorySearcher(_path); 
search.Filter = "(&(objectCategory=person)(objectClass=User))"; 
StringBuilder groupNames = new StringBuilder(); 
try 
{ 
    SearchResultCollection result = search.FindAll(); 
    ..... 
} 

감사합니다!

편집 :

좋아, 내가 그것을이 코드를 사용하여있어 :

DirectorySearcher search = new DirectorySearcher(_entry, "(sAMAccountName=" + userCode + ")"); 
+0

안토니 쇼 링크에서 exatcly 내가 원하는 것과 똑같은 일을하고 있습니다! 감사! – Otuyh

답변

1

어떤 정보가 사용자에 대해 알고해야합니까? 이 게시물에 당신에게 더 INSITE를 제공 할 경우, 우리는 당신의 코멘트 후 사용자

using (var identity = new WindowsIdentity(username)) 
{ 
    var user = new WindowsPrincipal(identity); 

    if (user.IsInRole("Some Role Name")) 
     return true; 

    return false; 
} 

편집 에 대한 정보를 검색하기 위해 과거에이 코드 유형을 사용하고, 나는 궁금하다. 그들은 여러분이 요청한 분야에 대한 정보를 보여 주며, InfoPath를 참조하기 때문에 직원을 검색하는 코드가 적용될 것인지는 확실하지 않습니다. http://msdn.microsoft.com/en-us/library/bb952744(v=office.12).aspx

+0

글쎄, "physicalDeliveryOfficeName"필드를 알고, 이것이 관련이 있는지 모르겠다. 나는 ur 코드를 시도 할 것이다! 감사! – Otuyh

+0

은'physicalDeliveryOfficeName'을 잡아 내고있는 것처럼 보이는 곳에 infopath에 관한 msdn 기사에 대한 링크를 추가했습니다, 당신은 그것도 잘 보일 것입니다 –

+1

고마워요! 이 링크는 답을 가지고 있습니다! – Otuyh

1

System.DirectoryServices.AccountManagement으로 전환하면 실제로 API는 훨씬 더 간단합니다. 예를 들어

가 :

public something FindUserByUserName(string UserName) 
    { 
     using (var searcher = 
      new PrincipalSearcher(new UserPrincipal(ConfigurationContext) { Name = UserName })) 
     { 
      var item = searcher.FindOne(); 

      // do whatever you want with the found object and return it 
     } 
    } 

ConfigurationContextPrincipalContext 반환하는 속성입니다 (자격 증명이 AD에 연결하려면 "연결 문자열"같은)

0

이 시도 :

public static List<string> GetADUserInfo(string login) 
{ 
    //Using Hosting.HostingEnvironment.Impersonate() 
    List<string> info = new List<string>(); 
    PrincipalContext infPC = new PrincipalContext(ContextType.Domain, "domain", "login", "password"); 
    UserPrincipal infUP = new UserPrincipal(infPC); 
    PrincipalSearcher infPS = new PrincipalSearcher(); 
    UserPrincipal foundUP; 

    infUP.SamAccountName = login; 
    infPS.QueryFilter = infUP; 
    foundUP = infPS.FindOne(); 

    if (foundUP != null) { 
     info.Add(foundUP.SamAccountName.ToLower); 
     info.Add(foundUP.GivenName); 
     info.Add(foundUP.Surname); 
     info.Add(foundUP.EmailAddress.ToLower); 
     return info; 
    } 

    return null; 
} 
관련 문제