Tôi đang cố gắng xác định xem tài khoản người dùng trong AD có được bật hay không. Đối với điều này tôi sử dụng đoạn mã sau:Tại sao UserPrincipal.Enabled trả về các giá trị khác nhau?
string domain = "my domain";
string group = "my security group";
string ou = "my OU";
//init context
using (var cnt= new PrincipalContext(ContextType.Domain, domain))
{
//find the necessary security group
using (GroupPrincipal mainGroup
= GroupPrincipal.FindByIdentity(cnt, IdentityType.Guid, group))
{
if (mainGroup != null)
{
//get the group's members
foreach (var user in mainGroup.GetMembers()
.OfType<UserPrincipal>()
.Where(u => u.DistinguishedName.Contains(ou)))
{
//ensure that all the info about the account is loaded
//by using FindByIdentity as opposed to GetMembers
var tmpUser= UserPrincipal.FindByIdentity(cnt,
user.SamAccountName);
//actually I could use `user` variable,
//as it gave the same result as `tmpUser`.
//print the account info
Console.WriteLine(tmpUser.Name + "\t" +
tmpUser.Enabled.HasValue + "\t" +
tmpUser.Enabled.Value);
}
}
}
}
Vấn đề là, khi tôi chạy mã này dưới tài khoản quản trị, tôi nhận được kết quả thực sự, trong khi khi tôi chạy nó dưới một tài khoản không phải priviledged, user.Enabled
lợi nhuận false
đối với một số tài khoản, trong khi đó phải là true
.
Các chỉ q tương tự & một Tôi cố gắng tìm được
- UserPrincipal.Enabled returns False for accounts that are in fact enabled?
- Everything in Active Directory via C#.NET 3.5 (Using System.DirectoryServices.AccountManagement)
mà không giúp đỡ ở đây.
Tại sao vậy? Các tùy chọn của tôi để nhận thông tin này trong tài khoản không được quản lý là gì?
Đây là cách tiếp cận khác: How to determine if user account is enabled or disabled:
private bool IsActive(DirectoryEntry de)
{
if (de.NativeGuid == null)
return false;
int flags = (int)de.Properties["userAccountControl"].Value;
if (!Convert.ToBoolean(flags & 0x0002))
return true;
else
return false;
}
Cùng phương pháp được mô tả trong Active Directory Objects and C#.
Tuy nhiên khi chạy trong tài khoản người dùng chưa được khai thác, thuộc tính userAccountControl
là null
và không thể xác định trạng thái tài khoản.
Cách giải quyết ở đây là sử dụng PrincipalContext Constructor, chỉ định thông tin xác thực của người dùng có đủ quyền truy cập vào AD.
Nó vẫn không rõ ràng với tôi, tại sao người dùng không được khai thác có quyền truy cập vào AD ở tất cả, và không thể nhận được giá trị của một số thuộc tính tài khoản nhất định. Có lẽ điều này không liên quan gì đến C# và phải được định cấu hình trong AD ...
Nếu bạn có thể thêm hướng dẫn chính xác từ liên kết của bạn, câu trả lời của bạn sẽ tốt hơn và an toàn không bị liên kết bị hỏng! – ForceMagic
Cảm ơn. Đã thêm blockquote thông tin liên quan từ liên kết. –