次の方法で共有


ユーザーの列挙

Windows NT 4.0ドメインとは異なり、Windows 2000ユーザーは、ドメインのルートだけでなく、ドメイン内の任意のコンテナまたは組織単位 (OU) に配置できます。 これは、ユーザーがディレクトリ階層内のさまざまな場所に存在できることを意味します。 したがって、ユーザーの列挙には2つの選択肢があります。

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

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

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

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

  • &(objectClass=user) (objectCategory=person) ) の詳細検索を実行して、ツリー内のすべてのユーザーを検索します。

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

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

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

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

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