2017-11-17 1 views
0

을 사용하는 Active Directory입니다. 부모 OU가 DirectorySearcher 쿼리를 사용하여 확보 된 특정 유형의 개체에서 속성을 가져올 수있는 가장 효율적인 방법을 찾으려고합니다. 이러한 개체의 부모는 사용자가 Active Directory에서 (직접 또는 간접적으로) 구성원 인 그룹입니다.DirectorySearcher에서 하위 개체 속성을 얻는 가장 효율적인 방법은 C#

이러한 그룹을 얻으려면 좋은 재귀 적 솔루션을 찾은 것 같습니다.하지만 일단 결과가 설정되면 데이터를 가져 오는 가장 효율적인 방법은 무엇인지 모르겠습니다. 지금은 하나의 객체를 얻는 것처럼 각 결과의 Path를 사용하여 데이터를 가져옵니다.

아마도 의 Filter에 추가하여 내 쿼리 결과에서 직접 이러한 개체를 가져 오는 것이 더 빠른 방법 일지 궁금합니다. 내가 찾고있는 개체는 개체이므로 가장 가까운 OU 인 DirectorySearcher 쿼리에서 해당 개체를 얻을 수있는 가장 가까운 것으로 보입니다.

foreach (SearchResult result in matchingADGroups) 
{ 
    // Here I need to get result's child object properties(could be multiple children) 
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + result.Path.Substring(7)); 

    foreach(DirectoryEntry child in entry.Children) 
    { 
     Shortcut shortcut = new Shortcut(); 
     shortcut.DisplayName = (string)child.Properties["myDisplayName"].Value; 
     shortcut.Id = (string)child.Properties["myId"].Value; 

     shortcuts.Add(shortcut); 
    } 
} 

답변

0

웹 요청이나 쿼리가 수행 될 때 항상 재귀에 대해 회의적입니다. 그러나 그것이 당신을 위해 작동한다면, 좋습니다!.
하위 노드 용 DirectorySearcher를 사용하여 resutls의 범위를 더욱 좁힐 수 있습니다. 디렉터리 검색기 설치 :

DirectorySearcher _Search = new DirectorySearcher(entry); 
_Search.Filter = "(&(objectCategory=person)(objectClass=user))";//can add more parameters 

ActiveDirectory 설정 방법에 따라 매개 변수를 더 추가 할 수 있습니다. 다음 당신은 당신이 모든 개체를 얻을 foreach 루프를 사용하여 반복 결과에

_Search.PropertiesToLoad.Add("distinguishedname"); 

사용 findall은() 메소드를 필요로하는 속성을 지정할 수 있습니다 :이 도움이

foreach (var result in _Search.FindAll()){ 
     //DO whatever you want here 
     Shortcut shortcut = new Shortcut(); 
     shortcut.DisplayName = result.DisplayName; 

} 

희망을.

관련 문제