Grh*_*rhm 3 .net c# active-directory .net-3.5
我正在尝试使用.Net 3.5在C#中执行一些基本的AD用户管理任务
我有一个包含用户详细信息的System.DirectoryServices.AccountManagement.UserPrincipal对象.
我可以打电话user.ExpirePasswordNow(),用户将在下次登录时被迫更改密码(并且"Active Directory用户和计算机"GUI具有"用户必须在下次登录时更改密码"复选框.
但是,我想测试这个属性的状态并对它采取行动 - 我不想总是通过ExpirePasswordNow()函数将它设置为true .我怎样才能做到这一点?
我发现了一些示例,建议我访问底层的DirectoryEntry及其pwdLastSet属性 - 但这看起来像一个无法穿透的System .__ ComObject类型 - 它可能是一个IADsLargeInteger,但由于其"保护级别",我无法转换为该类型.
我不知所措 - 有人可以帮忙吗?
我记得这是因为必须找出用户上次设置密码的时间,但我从未使用过它.希望它有所帮助......我从未尝试过UserAccountControl属性,但它看起来并不太疯狂.
如果此值设置为0并且User-Account-Control属性不包含UF_DONT_EXPIRE_PASSWD标志,则用户必须在下次登录时设置密码.
查看User-Account-Control,其中包含一个如何仅读取此标志的示例(作为查询的一部分).如果可能的话,将属性添加到'待返回'可能更好.
我认为这应该适用于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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9763 次 |
| 最近记录: |