Share via


도메인에서 그룹 열거

도메인의 루트뿐만 아니라 도메인의 모든 컨테이너 또는 OU(조직 구성 단위)에 그룹을 배치할 수 있습니다. 즉, 그룹은 디렉터리 계층 구조의 여러 위치에 있을 수 있습니다. 따라서 그룹을 열거하기 위한 두 가지 선택 항목이 있습니다.

  1. 컨테이너, OU 또는 도메인 루트에 직접 포함된 그룹을 열거합니다.

    열거할 그룹이 포함된 컨테이너 개체에 명시적으로 바인딩하고, IADsContainer.Filter 속성을 사용하여 "groups"가 포함된 필터를 클래스로 설정하고, IADsContainer::get__NewEnum 메서드를 사용하여 그룹 개체를 열거합니다.

    이 기술은 컨테이너 또는 OU 개체에 직접 포함된 그룹을 열거합니다. 컨테이너에 잠재적으로 다른 그룹을 포함할 수 있는 다른 컨테이너가 포함된 경우 해당 컨테이너에 바인딩하고 해당 컨테이너의 그룹을 재귀적으로 열거해야 합니다. 그룹 개체를 조작하고 특정 속성만 읽으려면 옵션 2에 설명된 심층 검색을 사용합니다.

    열거형은 각 그룹 개체를 나타내는 ADSI COM 개체에 대한 포인터를 반환하므로 QueryInterface 를 호출하여 그룹 개체에 대한 IAD, IADsGroupIADsPropertyList 인터페이스 포인터를 가져올 수 있습니다. 즉, 각 그룹 개체에 명시적으로 바인딩할 필요 없이 컨테이너의 각 열거형 그룹 개체에 대한 인터페이스 포인터를 가져올 수 있습니다. 컨테이너 내에서 직접 모든 그룹에 대해 작업을 수행하려면 IAD 또는 IADsGroup 메서드를 호출하기 위해 열거형에 각 그룹에 바인딩할 필요가 없습니다. 그룹에서 특정 속성을 검색하려면 두 번째 옵션에 설명된 대로 IDirectorySearch 를 사용합니다.

    이에 대한 예외는 모든 사용자, 인증된 사용자, BATCH 등과 같이 잘 모르는 보안 주체인 멤버가 포함된 그룹을 열거하려고 할 때 발생합니다. 이러한 유형의 개체에 바인딩할 수 없으므로 클래스, ADsPath 및 Name과 같은 특정 IAD 메서드가 열거된 멤버에서 호출될 때 올바른 결과를 반환하기 때문에 WinNT scope 그룹을 열거할 때 나열되지 않습니다.

  2. 트리의 모든 그룹을 찾으려면 "objectCategory=group"에 대한 심층 검색을 수행합니다.

    먼저 검색을 시작할 컨테이너 개체에 바인딩합니다. 예를 들어 도메인의 모든 그룹을 찾으려면 도메인의 루트에 바인딩합니다. 포리스트의 모든 그룹을 찾으려면 전역 카탈로그에 바인딩하고 GC의 루트에서 검색합니다.

    그런 다음 IDirectorySearch 를 사용하여 (objectCategory=group) 및 ADS_SCOPE_SUBTREE 검색 기본 설정이 포함된 검색 필터를 사용하여 쿼리합니다.

    참고

    ADS_SCOPE_ONELEVEL 검색 기본 설정으로 검색을 수행하여 바인딩된 컨테이너 개체의 직접 콘텐츠로 검색을 제한할 수 있습니다.

     

    IDirectorySearch 는 그룹에서 특정 속성의 값만 검색합니다. 값을 검색하려면 IDirectorySearch를 사용합니다. 검색에서 반환된 그룹 개체를 조작하려면, 즉 IAD 또는IADsGroup 메서드를 사용하려면 명시적으로 바인딩합니다. 이렇게 하려면 검색에서 반환할 속성 중 하나로 distinguishedName 을 지정하고 반환된 고유 이름을 사용하여 검색에서 반환된 각 그룹에 바인딩합니다.

    특정 속성만 검색됩니다. 그룹 클래스의 가능한 모든 특성을 명시적으로 지정하지 않으면 모든 특성을 검색할 수 없습니다.