Share via


ドメイン内のグループの列挙

グループは、ドメイン内の任意のコンテナーまたは組織単位 (OU) 、およびドメインのルートに配置できます。 つまり、グループはディレクトリ階層内のさまざまな場所に配置できます。 したがって、グループの列挙には2つの選択肢があります。

  1. コンテナー、OU、またはドメインのルートに直接含まれているグループを列挙します。

    列挙するグループを含むコンテナーオブジェクトに明示的にバインドし、IADsContainer.Filterrを使用して"groups"をクラスとして含むフィルターを設定します。IADsContainer::get__NewEnumメソッドを使用してグループオブジェクトを列挙します。

    この手法では、コンテナーまたはOUオブジェクトに直接含まれているグループを列挙します。 他のグループを含む可能性のある他のコンテナーがコンテナーに含まれている場合は、それらのコンテナーにバインドし、それらのコンテナーのグループを再帰的に列挙する必要があります。 グループオブジェクトを操作し、特定のプロパティのみを読み取るには、オプション2で説明されている詳細検索を使用します。

    列挙体は各グループオブジェクトを表すADSI COMオブジェクトへのポインターを返すため、 QueryInterfaceを呼び出して、グループオブジェクトへのIADsIADsGroup、およびIADsPropertyListインターフェイスポインターを取得できます。つまり、各グループオブジェクトに明示的にバインドしなくても、コンテナー内の列挙された各グループオブジェクトへのインターフェイスポインターを取得できます。 コンテナー内のすべてのグループに対して直接操作を実行するには、列挙体でIADsまたはIADsGroupメソッドを呼び出すために各グループにバインドする必要はありません。 グループから特定のプロパティを取得するには、2番目のオプションで説明したようにIDirectorySearchを使用します。

    この例外は、Everyone、Authenticated users、BATCHなどのwellKnownセキュリティプリンシパルであるメンバーを含むグループを列挙しようとした場合に発生します。 これらの種類のオブジェクトにバインドすることはできないため、WinNTスコープ内のグループを列挙するときには一覧に表示されません。これは、Class、ADsPath、Nameなどの特定のIADsメソッドが、列挙されたメンバーで呼び出されたときに正しい結果を返すためです。

  2. ツリー内のすべてのグループを検索するには、"objectCategory=group"の詳細検索を実行します。

    まず、検索を開始するコンテナーオブジェクトにバインドします。 たとえば、ドメイン内のすべてのグループを検索するには、ドメインのルートにバインドします。フォレスト内のすべてのグループを検索するには、グローバルカタログにバインドし、GCのルートから検索します。

    次に、IDirectorySearchを使用して、 (objectCategory=group) とADS_SCOPE_SUBTREEの検索設定を含む検索フィルターを使用してクエリを実行します。

    Note

    ADS_SCOPE_ONELEVELの検索設定を使用して検索を実行し、バインド先のコンテナーオブジェクトの直接のコンテンツに検索を制限することができます。

     

    IDirectorySearchは、グループから特定のプロパティの値のみを取得します。 値を取得するには、IDirectorySearchを使用します。 検索から返されたグループオブジェクトを操作する (IADsまたはIADsGroupメソッドを使用する) には、それらに明示的にバインドします。 これを行うには、検索から返すプロパティの1つとしてdistinguishedNameを指定し、返された識別名を使用して、検索で返された各グループにバインドします。

    特定のプロパティのみが取得されます。 グループクラスのすべての属性を明示的に指定せずに、すべての属性を取得することはできません。