我可以获得单个用户的有效“msDS-UserPasswordExpiryTimeComputed”属性:
(([DateTime]::FromFileTime((Get-ADUser $UserName -Properties "msDS-UserPasswordExpiryTimeComputed")."msDS-UserPasswordExpiryTimeComputed")))
但是我在定位一组特定用户时遇到了麻烦。我较大的脚本旨在从特定 OU 的帐户中提取各种 AD 用户属性并导出到 csv。除“PasswordExpiry”对象外,所有属性都按预期填充。
下面的示例为每个用户返回一个虚假的“PasswordExpiry”日期“12/31/1600”。“C:\UserList.txt”每行包含一个 sAMAccountNames。
$UserList=Get-Content "C:\UserList.txt"
ForEach ($UserName in $UserList) {Get-ADUser "$UserName" -Properties * |
Select-Object sAMAccountName,whenCreated, `
@{Name="lastLogon";Expression={[DateTime]::FromFileTime($_.lastLogon)}}, `
@{Name="pwdLastSet";Expression={[DateTime]::FromFileTime($_.pwdLastSet)}}, `
@{Name="PasswordExpiry";Expression={[DateTime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, `
cannotChangePassword,passwordNeverExpires, `
@{Name="GroupMember";Expression={($_ | Select -ExpandProperty MemberOf) | Where {$_ -Like "*Desired.Group*"}}} |
Export-Csv -Path "C:\UserInfo.csv" -Append -NoTypeInformation}
如果我想查询所有 AD 用户,这很有效:
Get-ADUser -Filter * –Properties sAMAccountName,"msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property sAMAccountName,@{Name="PasswordExpiry";Expression={[DateTime]::FromFileTime($_.“msDS-UserPasswordExpiryTimeComputed”)}}
但是,如果我将 [-SearchBase "OU=Users,DC=Domain,DC=local"] 参数添加到 Get-ADUser,我会得到“PasswordExpiry”的空输出。我想我可以尝试通过一些后期处理来解析整个输出。似乎触摸的次数超出了我应该触摸的次数。
我知道我可以根据“pwdLastSet”属性计算过期时间。但我想提取实际值,因为年龄政策可能是未知的。任何帮助表示赞赏。