我有一个ADUsers的列表,但foreach ADUSER我想得到它的属性“LastPasswordSet”,这是唯一可访问的(我不知道是否有任何其他方式以及)通过UserPrincipal。
如果我使用这个代码,
PrincipalContext l_objContext = new PrincipalContext(ContextType.Domain, l_strDomain, l_strUserOU);
foreach (ADUser ADuser in Users)
{
UserPrincipal usr = UserPrincipal.FindByIdentity(l_objContext, ADuser.CommonName.ToString());
if (usr.LastPasswordSet.HasValue)
{
EmailString(usr.LastPasswordSet.ToString());
}
}
现在我不想提供任何东西给UserPrincipal其他然后ADUSER的任何属性,上面的代码也不起作用,问题是它发送几封电子邮件,然后在某个地方遇到它,并出现错误和服务停止,这可能是因为一些无效的日期(我不想修复它,只是说明,以便您了解我在做什么)
2条答案
按热度按时间5f0d552i1#
您可以创建自己的
PrincipalContext
,然后使用UserPrincipal.FindByIdentity
获取主体。从这里开始,我想您已经知道了,您可以调用LastPasswordSet
属性。注意:您需要添加对
System.DirectoryServices.AccountManagement
的引用[编辑:回应评论中的进一步问题]
要测试密码是否是在一个多月前最后设置的-类似于以下内容:
有一件事要记住的是,一个月是一个模糊的时间长度-它的长度取决于你是在哪个月(和年)。根据你想做的事情,它可能是更适合有一个固定的时间段,如28天。
xvw2m8pv2#
标记为答案的帖子在我的情况下不起作用,因为必须有一些安全设置,不允许用户访问此属性,因为它没有被返回,并且属性PasswordNeverExpires始终为true。如果管理员用户对自己执行此操作,他们将获得正确的值。