我正在尝试使用.Net 3.5
在C#中执行一些基本的AD用户管理任务我有一个包含用户详细信息的System.DirectoryServices.AccountManagement.UserPrincipal对象。
我可以调用user.ExpirePasswordNow()
,用户将在下次登录时被迫更改密码(并且“Active Directory用户和计算机”GUI具有“用户必须在下次登录时更改密码”复选框。< / p>
但是,我想测试此属性的状态并对其进行操作 - 我不想总是通过ExpirePasswordNow()
函数将其设置为true。我怎么能这样做?
我发现了一些示例,建议我访问底层的DirectoryEntry及其pwdLastSet
属性 - 但这看起来像一个不可穿透的System .__ ComObject类型 - 它可能是一个IADsLargeInteger但由于其“保护”我无法转换为该类型电平”。
我不知所措 - 有人可以帮忙吗?
答案 0 :(得分:6)
我记得这一点,因为必须找出用户上次设置密码的时间,但我从未使用过它。希望它有所帮助......我从未尝试过UserAccountControl属性,但它看起来并不太疯狂。
如果此值设置为 0 且User-Account-Control属性不包含UF_DONT_EXPIRE_PASSWD标志,则用户必须在下次登录时设置密码。
查看用户帐户控制,有人包含了如何仅读取此标志的示例(作为查询的一部分)。如果可能的话,将属性添加到'待返回'可能更好。
我认为这应该适用于3.5。他们让这个更简单。我无法获取DirectorySearcher对象来返回UserAccountControl标志,只有这一点。也许这就是权限,不知道......
Imports System.DirectoryServices.AccountManagement
Dim pctx = New PrincipalContext(AccountManagement.ContextType.Domain)
Dim p = UserPrincipal.FindByIdentity(pctx, "andrew")
If p.LastPasswordSet.HasValue = False Then
If p.PasswordNeverExpires = False Then
Console.WriteLine("You should have to enter a password next time!")
End If
End If
答案 1 :(得分:0)
这可能会有所帮助:
Password expiration email utility
我找不到免费的实用工具 这将发送员工的电子邮件 在他们的Windows密码之前 准备好了,所以我写了一个C# 这样做的控制台应用程序。