如何确定用户帐户是启用还是禁用

我正在把一个快速的C#赢得表格应用程序扔在一起,帮助解决重复性的文书工作。

我已经在AD中search了所有用户帐户,并将它们添加到带有checkbox的列表视图中。

我想默认listviewitems的默认检查状态取决于帐户的启用/禁用状态。

string path = "LDAP://dc=example,dc=local"; DirectoryEntry directoryRoot = new DirectoryEntry(path); DirectorySearcher searcher = new DirectorySearcher(directoryRoot, "(&(objectClass=User)(objectCategory=Person))"); SearchResultCollection results = searcher.FindAll(); foreach (SearchResult result in results) { DirectoryEntry de = result.GetDirectoryEntry(); ListViewItem lvi = new ListViewItem( (string)de.Properties["SAMAccountName"][0]); // lvi.Checked = (bool) de.Properties["AccountEnabled"] lvwUsers.Items.Add(lvi); } 

我努力find正确的属性来parsing从DirectoryEntry对象获取帐户的状态。 我已经search了AD用户属性 ,但没有发现任何有用的东西。

任何人都可以提供任何指针?

这里的代码应该工作…

 private bool IsActive(DirectoryEntry de) { if (de.NativeGuid == null) return false; int flags = (int)de.Properties["userAccountControl"].Value; return !Convert.ToBoolean(flags & 0x0002); } 

没有任何人问,但这是一个Java版本(因为我在这里find了一个)。 空检查留给读者作为练习。

 private Boolean isActive(SearchResult searchResult) { Attribute userAccountControlAttr = searchResult.getAttributes().get("UserAccountControl"); Integer userAccountControlInt = new Integer((String) userAccoutControlAttr.get()); Boolean disabled = BooleanUtils.toBooleanObject(userAccountControlInt & 0x0002); return !disabled; } 

使用System.DirectoryServices.AccountManagement:域名和用户名必须是域和用户名的string值。

 using (var domainContext = new PrincipalContext(ContextType.Domain, domainName)) { using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, username)) { if (foundUser.Enabled.HasValue) { return (bool)foundUser.Enabled; } else { return true; //or false depending what result you want in the case of Enabled being NULL } } }