Powershell Active Directory中有关密码过期日期的值相互矛盾
我正在使用Powershell确定域帐户的密码过期日期。我已使用以下命令获取此信息:Powershell Active Directory中有关密码过期日期的值相互矛盾,powershell,active-directory,windowsdomainaccount,Powershell,Active Directory,Windowsdomainaccount,我正在使用Powershell确定域帐户的密码过期日期。我已使用以下命令获取此信息: Get ADUser-Filter{SamAccountName-eq”“}-Properties“DisplayName”、“msDS UserPasswordExpiryTimeComputed” 然后,我使用以下方法将此值转换为有意义的日期: [datetime]::FromFileTime() 这适用于我使用的所有域,只有一个除外。在该域中,我得到一个值9223372036854775807,作为msD
Get ADUser-Filter{SamAccountName-eq”“}-Properties“DisplayName”、“msDS UserPasswordExpiryTimeComputed”
然后,我使用以下方法将此值转换为有意义的日期:
[datetime]::FromFileTime()
这适用于我使用的所有域,只有一个除外。在该域中,我得到一个值9223372036854775807
,作为msDS UserPasswordExpiryTimeComputed
。我无法使用FromFileTime
函数将此数字转换为日期。它作为错误抛出。经过研究,我发现这个数字意味着密码不会过期。但是,我知道密码在这个域中确实会过期。此外,来自Get-ADUser
cmdlet的PasswordNeverExpires
属性显示为False
如何从msDS UserPasswordExpiryTimeComputed
属性获取9223372036854775807
,如何从PasswordNeverExpires
属性获取False
?这似乎是一个矛盾。我错过了什么?当msDS UserPasswordExpiryTimeComputed
也可以9223372036854775807
时,是否存在其他情况?谢谢。列出了几种条件,其中msDS UserPasswordExpiryTimeComputed
返回9223372036854775807
aka0x7fffffffffffffffff
aka[int64]::MaxValue
(TO
指给定的目标对象):
如果需要任何ADS\u UF\u智能卡
,ADS\u UF\u密码不过期
,ADS\u UF\u工作站信任账户
,ADS\u服务器信任账户
,ADS\u UF\u域间信任账户
位在中设置为!userAccountControl
,然后到!msDS UserPasswordExpiryTimeComputed
=0x7fffffffffffff
[…]
否则,如果
有效MaximumPasswordAge=0x80000000000000
,则到!msDS UserPasswordExpiryTimeComputed
=0x7FFFFFFFFFFFFFFF
(其中,有效最大密码在[MS-SAMR]第3.1.1.5节中定义)
在不了解所有详细信息的情况下,返回的0x7fffffffffffffffffffffff
属性msDS UserPasswordExpiryComputed
似乎表明实际上没有密码过期,原因有很多,其中只有一个原因是PasswordNeverExpires
被设置为$True
因此,您可以过滤掉这些值:
Get-ADUser -Filter "SamAccountName -eq '<username>'" `
-Properties DisplayName, msDS-UserPasswordExpiryTimeComputed | #`
Where { $_.msDS-UserPasswordExpiryTimeComputed -ne 0x7FFFFFFFFFFFFFFF } | ForEach {
# ...
$dt = [datetime]::FromFileTime($_.msDS-UserPasswordExpiryTimeComputed)
}
Get ADUser-过滤器“SamAccountName-eq”`
-属性DisplayName,msDS UserPasswordExpiryTimeComputed|#`
其中{$\.msDS UserPasswordExpiryTimeComputed-ne 0x7fffffffffffff}ForEach{
# ...
$dt=[datetime]::FromFileTime($\ msDS.UserPasswordExpiryTimeComputed)
}
甚至可以将0x7FFFFFFFFFFFFFFF
的测试合并到-Filter
参数中
顺便说一句:请注意,我使用了字符串而不是脚本块({…}
)作为-Filter
参数,因为使用脚本块是可行的。我目前没有DC进行测试,但理论上这是可行的
使用Get ADDefaultDomainPasswordPolicy-Identity domain.com
获取如下用户的passwordLastSet
属性:(Get ADUser-Identity-Properties*)。passwordLastSet
并根据域的区域性转换为适当的[datetime]
对象:Get Culture
<代码>日期时间
格式可能会根据美国和英国等地区的设置而更改
passwordpolicy
和passwordlastset
日期,确定密码是否过期是一个简单的数学问题Search-ADAccount -AccountExpiring -TimeSpan 10.00:00:00
顺便说一句:使用脚本块(
{…}
)作为-Filter
参数是错误的。