检查Active Directory帐户是否已锁定(WPF C#)

大家好(这是我的第一篇文章)我有一些简单的AD代码,我从Codeplex中提取http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C )并且我能够从所述代码中获取所有最终用户的信息。 现在,我一直在搜索和搜索,并从这里找到一些有趣的代码片段,并在网络上关于“用户是否被锁定?”

我想使用我已经使用了2年的代码,只需添加一些内容就可以添加到锁定的部分…如果有一个文本框给了我,我会很高兴信息,或复选框,或只是说“用户锁定”的东西,然后我会通知我的Exchange团队并让用户解锁…

我的代码如下:

string eid = this.tbEID.Text; string user = this.tbUserName.Text.ToString(); string path = "PP://dc=ds,dc=SorryCantTellYou,dc=com"; DirectoryEntry de = new DirectoryEntry(path); DirectorySearcher ds = new DirectorySearcher(de); ds.Filter = "(&(objectCategory=person)(sAMAccountName=" + eid + "))"; SearchResultCollection src = ds.FindAll(); //AD results if (src.Count > 0) { if (src[0].Properties.Contains("displayName")) { this.tbUserName.Text = src[0].Properties["displayName"][0].ToString(); } } 

所以,如果我可以弄清楚如何使用相同的目录条目,并且搜索者向我显示帐户锁定状态,这将是惊人的..请协助

如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement (S.DS.AM)命名空间。 在这里阅读所有相关内容:

  • 管理.NET Framework 3.5中的目录安全性主体
  • System.DirectoryServices.AccountManagement上的MSDN文档

基本上,您可以定义域上下文并在AD中轻松查找用户和/或组:

 // set up domain context PrincipalContext ctx = new PrincipalContext(ContextType.Domain); // find a user UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SamAccountName"); if(user != null) { string displayName = user.DisplayName; if(user.IsAccountLockedOut()) { // do something here.... } } 

新的S.DS.AM使得在AD中与用户和群组玩起来非常容易!