2010-01-05 89 views
49

我将一个快速的C#win表单应用程序放在一起,以帮助解决重复性的文书工作。如何确定用户帐户是启用还是禁用

我已在AD中为所有用户帐户执行搜索,并将它们添加到带有复选框的列表视图中。

我想默认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); 
} 

我很努力地找到正确的属性来解析从DirectoryEntry对象获取帐户的状态。我搜索了AD User attributes,但没有找到任何有用的东西。

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

回答

85

这里的代码应该工作...

private bool IsActive(DirectoryEntry de) 
{ 
    if (de.NativeGuid == null) return false; 

    int flags = (int)de.Properties["userAccountControl"].Value; 

    return !Convert.ToBoolean(flags & 0x0002); 
} 
+0

完美谢谢。 – Bryan 2010-01-05 11:36:10

+21

该死的,你快,但这是一个链接关于所有的标志是什么意思:http://msdn.microsoft.com/en-us/library/ms680832.aspx – Oliver 2010-01-05 11:47:47

+0

thx您的评论:) +1 – 2010-01-05 11:48:48

5

不是说没有人问过,但这里有一个Java版本(因为我结束了在这里寻找一个)。空检查留给读者练习。

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; 
} 
+0

Upvote花时间分享,因为标题不是语言特定的,这可能确实有助于某人。 – allen1 2015-06-26 17:54:41

5

使用System.DirectoryServices.AccountManagement: 域名,并用户名必须是域和用户名的字符串值。

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 
     } 
    } 
} 
+0

'((UserPrincipal)foundUser).Enabled == true'是对我有用的 – 2016-05-04 22:13:19

相关问题