Tôi đang sử dụng System.DirectoryServices.AccountManagement.dll
để xử lý Active Directory để nhận tất cả người dùng trong nhóm "Người dùng miền".Chỉ nhận tài khoản đã kích hoạt từ Active Directory
Điều này đang trả lại tất cả người dùng trong miền nhưng tôi chỉ cần có được những người dùng đã bật.
Dưới đây là một số mẫu mã:
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);
}
}
nhóm khác hoạt động tốt, nhưng khi nhóm là "Domain Users", giá trị của các tài sản Enabled
là false
cho tất cả người dùng. Điều này làm cho nó không thể phân biệt giữa người dùng được kích hoạt và bị vô hiệu hóa mà không cần thực hiện thêm truy vấn cho mỗi người dùng.
Bạn chỉ cần tên tài khoản? Có yêu cầu sử dụng không gian tên AccountManagement không? Bạn có làm bất cứ điều gì với đối tượng UserPrincipal khác ngoài lưu trữ tên không? Tôi chỉ hỏi vì yêu cầu của bạn có thể được phục vụ tốt hơn bằng cách sử dụng không gian tên DirectoryServices và DirectorySearcher với Bộ lọc LDAP như sau: (& (objectclass = user) (memberOf = CN = Người dùng miền, dc = company, dc = com) (! (userAccountControl: 1.2.840.113556.1.4.803: = 2))) Sẽ trả về tất cả người dùng trong nhóm đó được kích hoạt. – randcd
randcd: Tôi muốn sử dụng không gian tên AM vì nó cung cấp một API rất sạch sẽ. Tôi chắc chắn có thể sử dụng LDAP, nhưng sau đó mọi thứ trở nên phức tạp hơn (đặc biệt trong trường hợp người dùng chỉ là thành viên của Người dùng miền vì đó là nhóm chính của họ, vì nó không được liệt kê trong 'memberOf' trong trường hợp đó). – RobSiklos
"Hiệu trưởng" trong vòng lặp ForEach thực sự phải là "UserPrincipal" - "Đã bật" không phải là phương thức hoặc thuộc tính có thể truy cập trên đối tượng Princpal. Ít nhất không phải trong .net 4.6.1. Điều này tất cả có thể được thực hiện với không gian tên System.DirectoryServices.AccountManagement. – DtechNet