【发布时间】:2013-01-18 21:39:35
【问题描述】:
我想从 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 这个条件吗?
(我只找到了AccountExpirationDate 和AccountLockoutDate)
- 用户密码即将过期
- 用户密码已过期
- 检查用户密码是否可以过期
- 用户帐号过期(帐号,无密码)
- 已过期的用户帐户(帐户,无密码)
- 用户帐户未过期
【问题讨论】:
-
如果您还没有 - 绝对阅读 MSDN 文章 Managing Directory Security Principals in the .NET Framework 3.5,它很好地展示了如何充分利用
System.DirectoryServices.AccountManagement中的新功能(它回答了您的很多问题,我相信) -
您好,感谢文章的链接,我阅读并尝试了除 AD 之外的测试代码,但不幸的是,我仍然处于几乎相同的情况。例如。当我锁定用户帐户时,“IsAccountLockedOut”属性的状态始终为 False,如果我设置帐户到期日期,则永远不会设置 AccountLockoutTime 属性等。此外,在 UserPrincipal 类中,许多其他属性根本不在用户之下。我可能不明白为什么要使用 PrincipalContext 而不是 DirectoryEntry 的哲学。
-
对不起,我的错。错误会在椅子和键盘之间,我真的没明白原理。一旦我有结果,我会发送正确的答案。
标签: c# active-directory principalcontext