【问题标题】:In c# how does one set the value of the AD property "pwdLastSet"在c#中如何设置AD属性“pwdLastSet”的值
【发布时间】:2011-04-28 19:41:58
【问题描述】:

在c#中如何设置AD属性“pwdLastSet”的值

这不起作用:

DateTime passwordLastSetTarg  = System.DateTime.Now.AddHours( -25 );

var adDate                    = userToActOn.ADEntry.Properties[ "pwdLastSet" ].Value;
long filetime                 = passwordLastSetTarg.ToFileTimeUtc();

userToActOn.ADEntry.Properties[ "pwdLastSet" ][ 0 ] = filetime;

这与我的上一个问题密切相关,但如果很抱歉,我希望它不是多余的。

【问题讨论】:

  • 你的格式让我头疼。

标签: asp.net-mvc active-directory change-password


【解决方案1】:

您不能将其设置为日期 - 只能设置为 0(现在到期)或 -1(将时间重置为“现在”)

【讨论】:

  • 这就是我看到的行为。基本上我希望我的网络服务更改密码并忽略广告中的 24 等待规则,这样他们就可以在登录时立即重置它。有什么办法吗?
  • 如果您只是在代码中设置密码会发生什么?您是否遇到异常或是否有效?
  • webservice 可以直接做,忽略所有基于 AD 密码的规则,但是更改密码的东西使用会员提供程序,所以所有其他规则都将被应用,比如密码复杂性,它只是具体的“等待 24 小时”我需要跳过并且仅当它是通过 Web 服务设置时。如果我重新编码页面以使用该服务,则不会应用任何规则。
  • 我认为 DirectoryEntry 属性不是只读的...例如 dir_entry_object.Properties["pwdLastSet"][0] = 0 (int64 var)...我无法设置它为零而没有此错误:错误 HRESULT E_FAIL 已从对 COM 的调用中返回。
  • 另外,使用 dir_entry_obj.Properties["pwdLastSet].Value 设置 int64 var 等于 0 会返回:System.Runtime.InteropServices.COMException: '未指定错误
【解决方案2】:

除非我误读了MSDN docs,否则这是一个只读属性——正如我所预料的那样。用户更改密码时由 AD 设置。

【讨论】:

  • 我同意这是一个只读属性,如果你使用 System.DirectoryServices.AccountManagement UserPrincipal 的 LastPasswordSet 属性只是获取,没有设置
  • 你可以明确地将它设置为 0,我没有检查 -1 但我认为它也可以,你不能将它设置为 25 小时前的 Int64 FileTime,这些是我测试过的情况.
  • 仅供参考,不使用 System.DirectoryServices.AccountManagement ,而是使用 DirectoryEntry。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
相关资源
最近更新 更多