Active Directory查询的PrincipalContext

3
我希望能够从Active Directory中制作一些简单的报告。在讨论等过程中,我发现如果使用.NET FW 3.5及以上版本,则适合使用PrincipalContext。我想了解原理以及使用这个新功能可以做什么(与DirectoryEntry不同)。 代码框架
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, 
    "YOURDOMAIN", "OU=SomeOU,DC=YourCompany,DC=com");

// define a "query-by-example" principal - here, we search for a UserPrincipal 
// which has a password that will expire in 3 days or less
UserPrincipal userTemplate = new UserPrincipal(ctx);
userTemplate.AdvancedSearchFilter.AccountExpirationDate(DateTime.Today.AddDays(3), MatchType.LessThanOrEquals);

// instantiate searcher
PrincipalSearcher searcher = new PrincipalSearcher(userTemplate);

// enumerate matching users
foreach (Principal foundPrincipal in searcher.FindAll())
{
    UserPrincipal foundUser = (foundPrincipal as UserPrincipal);

    if (foundUser != null)
    {
        // do something with users found - e.g. send e-mail
    }
}

是否可以在代码中添加以下LDAP登录属性:

  • 使用的LDAP版本(2或3)
  • 如何设置LDAP运行的端口
  • 如果需要SSL连接,如何处理?(不同的端口,必须满足特殊要求)

此外,我可以通过AdvancedSearchFilter实现以下条件吗?
(我只找到了AccountExpirationDateAccountLockoutDate

  • 用户密码将在不久的将来过期
  • 用户密码已过期
  • 检查用户的密码是否可以过期
  • 用户帐户过期(帐户,无需密码)
  • 过期的用户帐户(帐户,无需密码)
  • 用户帐户未过期

1
如果你还没有阅读过的话,一定要去看看MSDN文章《在.NET Framework 3.5中管理目录安全主体》,它很好地展示了如何充分利用System.DirectoryServices.AccountManagement中的新功能(并且回答了很多你的问题,我相信)。 - marc_s
你好,感谢提供文章链接。我已经阅读并尝试了测试代码,但不幸的是,我仍然处于几乎相同的情况。例如,当我锁定用户帐户时,“IsAccountLockedOut”属性的状态始终为False;如果我设置帐户过期日期,则“AccountLockoutTime”属性永远不会被设置等。此外,在UserPrincipal类中,许多其他属性根本不属于用户。我可能不理解为什么要使用PrincipalContext而不是DirectoryEntry的哲学。 - czWolfHunter
对不起,是我的错误。这个错误出现在椅子和键盘之间,我真的没有理解原理。一旦我有结果,我会发送正确答案。 - czWolfHunter
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接