Powershell 无法从 Active Directory 检索 pwdLastSet

Powershell 无法从 Active Directory 检索 pwdLastSet

有人能发现 Powershell 命令在尝试从 Active Directory 中提取某些用户的 pwdLastSet 时存在错误吗?

对于某些帐户,它有效:

PS C:\> get-aduser -filter "name -like 'Admin*'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet  | format-list

name       : Administrator
pwdLastSet : 131254235816382539

对于某些人来说则不然:

PS C:\> get-aduser -filter "name -like 'G*Ol*'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet  | format-list


name       : Grzegorz Olędzki
pwdLastSet :

需要注意的是,该属性似乎是从 GUI 检索时设置的: 同一用户的属性对话框

该问题持续影响多个帐户,因此我怀疑其中存在一些我根本无法理解的事情。

答案1

仔细检查并确保您以管理员身份运行 powershell。如果您的实例未提升权限,则可能会出现此问题,因为某些密码策略 (GPO) 可能被隐藏。

答案2

如果 pwdLastSet 值为空,则表示用户必须在下次登录时更改密码。取消勾选用户属性中的复选框将显示日期

答案3

以下是您可以用来测试的函数:

function Get-PwdLastSet {
  param(
    [parameter(Mandatory=$true)] [String] $sAMAccountName
  )
  $searcher = [ADSISearcher] "(&(pwdLastSet=*)(sAMAccountName=$sAMAccountName))"
  $searcher.PropertiesToLoad.AddRange(@("pwdLastSet","sAMAccountName"))
  $searchResult = $searcher.FindOne()
  if ( $searchResult ) {
    $pwdLastSet = $searchResult.Properties["pwdlastset"][0]
    if ( $pwdLastSet -gt 0 ) {
      [DateTime]::FromFileTime($pwdLastSet)
    }
    else {
      "Password is expired"
    }
  }
}

如果此脚本无法读取pwdLastSet属性,我能想到的唯一解释是运行脚本的用户缺乏从 Active Directory 读取该属性的权限。据我所知,默认情况下,该属性应该可供 的所有成员读取Domain Users,因此可能是 Active Directory 对象权限已从默认值更改。

相关内容