2012-10-23 4 views
2

특정 사용자가 구성원 인 모든 Active Directory 그룹을 가져오고 싶습니다.사용자가 속한 모든 상위 AD 그룹 가져 오기

사용자를 위해 모든 즉각적인 AD 그룹을 가져 오는 스크립트가 있습니다 (아래 코드 참조).

그러나 사용자가 속한 즉각적인 각 AD 그룹에 대해 모든 상위 그룹을 어떻게 얻습니까?

나는 IT Team Managers이라는 광고 그룹에 직접 참여하고 있습니다. 이 그룹은 IT Team National 등의 상위 그룹의 구성원입니다. 내 코드에서이 상위 그룹을 어떻게 얻을 수 있습니까?

미리 감사드립니다.

DirectorySearcher ouSearch = new DirectorySearcher(entry); 
ouSearch.Filter = "(&(objectClass=User)(sAMAccountName=" + username + "))"; 

//ouSearch.PropertiesToLoad.Add("samAccountName"); 
ouSearch.PropertiesToLoad.Add("memberOf"); 
ouSearch.SearchScope = SearchScope.Subtree; 

SearchResult allOUS = ouSearch.FindOne(); 

//foreach (string g in allOUS.Properties["memberOf"]) 
{ 
    equalsIndex = g.IndexOf("=", 1); 
    commaIndex = g.IndexOf(",", 1); 

    if (equalsIndex == -1) 
    { 
     return null; 
    } 

    groupNames.Append(g.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)); 
    groupNames.Append(","); 
} 

답변

2

당신이 .NET 3.5 및 최대에 있다면, 당신은 System.DirectoryServices.AccountManagement (S.DS.AM) 네임 스페이스를 확인해야합니다. 여기에 대한 모든 읽기 :

// set up domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find a user 
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); 

if(user != null) 
{ 
    // get the "authorization groups" the user is a member of - recursively 
    var authGroups = user.GetAuthorizationGroups(); 

    // iterate over groups 
    foreach(Principal p in authGroups) 
    { 
     // do something with groups ....  
    } 
} 

을 : MSDN docs on System.DirectoryServices.AccountManagement

기본적으로

+0

답변 해 주셔서 감사합니다. 그것은 작동합니다 - 그러나 내가 그것을 실행할 때, 그것은 ~ 100 광고 그룹을 반환하는 천천히 SOOOOOO입니다 ... 거의 1 분 ... 거기에 어떤 방법으로 속도를 높이거나 어떻게 정제/그룹 필터를 반환하지 않습니다 너무 많은 그룹? –

관련 문제