列舉使用者

不同於 Windows NT 4.0 網域,Windows 2000 使用者可以放在網域中的任何容器或組織單位(OU)以及網域的根目錄中。 這表示用戶可以在目錄階層中的許多位置。 因此,您有兩個列舉用戶的選項:

  • 列舉直接包含在容器、OU 或網域根目錄的使用者:

    使用 IADsContainer.Filter 屬性,明確系結至包含您有興趣列舉之使用者的容器物件、使用 IADsContainer.Filter 屬性設定包含 “user” 的篩選,並使用 IADsContainer::get__NewEnum 方法來列舉用戶物件。

    這項技術可用來列舉直接包含在容器或 OU 物件中的使用者。 如果容器包含可能包含其他使用者的其他容器,您必須系結至這些容器,並以遞歸方式列舉這些容器上的使用者。 如果您不需要操作用戶物件,而且只需要讀取特定屬性,請使用選項 2 中所述的深層搜尋。

    由於列舉會傳回代表每個用戶物件的 ADSI COM 物件的指標,因此您可以呼叫 QueryInterface 來取得用戶物件的 IADsIADsUserIADsPropertyList 介面指標。 這表示您可以取得容器中每個列舉用戶物件的介面指標,而不需要明確系結至每個用戶物件。 若要直接在容器內對所有使用者執行作業,列舉可避免必須系結至每個使用者,才能呼叫 IADsIADSUser 方法。 若要從使用者擷取特定屬性,請使用 IDirectorySearch ,如選項 2 中所述。

  • 執行深入搜尋 (&&(objectClass=user)(objectCategory=person)) 以尋找樹狀目錄中的所有使用者:

    首先,系結至要開始搜尋的容器物件。 例如,若要尋找網域中的所有使用者,請系結至網域的根目錄;若要尋找樹系中的所有使用者,請系結至全域編錄,並從 GC 的根目錄進行搜尋。

    然後使用 IDirectorySearch 來使用包含 (&&(objectClass=user)(objectCategory=person)的搜尋篩選和搜尋喜好設定來查詢ADS_SCOPE_SUBTREE。

    您可以使用 ADS_SCOPE_ONELEVEL 的搜尋喜好設定來執行搜尋,將搜尋限制為您系結之容器物件的直接內容。

    IDirectorySearch 只會從使用者擷取特定屬性的值。 若要擷取值,請使用 IDirectorySearch。 若要操作從搜尋傳回的用戶物件,也就是您想要使用 IADs IADsUser 方法,您必須明確系結至它們。 若要這樣做,請將distinguishedName指定為要從搜尋傳回的屬性之一,並使用傳回的辨別名稱系結至搜尋中傳回的每個使用者。

    只會擷取特定屬性。 您無法在未明確指定使用者類別的每個可能屬性的情況下擷取所有屬性。