我正在使用System.DirectoryServices.AccountManagement.dll
來處理Active Directory 以獲取「域用戶」組中的所有用戶。從Active Directory獲取已啓用帳戶
這是返回域中的所有用戶,但我只需要獲取啓用的用戶。
下面是一些示例代碼:
List<string> users = new List<string>();
PrincipalContext pcContext = GetPrincipalContext();
GroupPrincipal grp = GroupPrincipal.FindByIdentity(pcContext,
IdentityType.Name,
"Domain Users");
foreach (Principal user in grp.GetMembers(true).OfType<UserPrincipal>())
{
if (user.Enabled != false)
{
users.Add(user.Name);
}
}
其他組做工精細,但當組是「域用戶」,該Enabled
屬性的值是false
於所有用戶。這使得無法區分啓用和禁用的用戶而無需爲每個用戶進行進一步的查詢。
你只需要帳號名嗎?是否需要使用AccountManagement命名空間?除了存儲名稱之外,您是否對UserPrincipal對象執行任何操作?我只問,因爲您的需求可能會更好地使用DirectoryServices命名空間和DirectorySearcher與LDAP過濾器如下所示:(&(objectclass = user)(memberOf = CN = Domain Users,dc = company,dc = com) (userAccountControl:1.2.840.113556.1.4.803:= 2)))這將返回該組中啓用的所有用戶。 – randcd
randcd:我寧願使用AM命名空間,因爲它提供了一個非常乾淨的API。我當然可以使用LDAP,但是一切都變得更加複雜(特別是在用戶只是域用戶的成員的情況下,因爲這是他們的主要組,因爲它沒有在'memberOf'中列出)。 – RobSiklos
ForEach循環中的「Principal」實際上應該是「UserPrincipal」 - 「Enabled」不是可在Princpal對象上訪問的方法或屬性。至少不在.net 4.6.1中。這可以通過System.DirectoryServices.AccountManagement命名空間完成。 – DtechNet