我正在尝试获取我们域中所有用户的列表及其密码到期日期服务器操作系统 Windows server 2008 有什么想法或建议吗?
答案1
你可以为每个用户查询一个可爱的计算属性,称为msDS-UserPasswordExpiryTimeComputed
Get-ADUser
。您可以使用本机 Active Directory powershell 模块通过以下命令进行查询:
Import-Module ActiveDirectory
Get-ADUser -Filter * -SearchBase 'DC=example,DC=com' -Prop msDS-UserPasswordExpiryTimeComputed |
Select Name,msDS-UserPasswordExpiryTimeComputed
但是,该属性作为文件时间值不太人性化。因此,我们在输出中添加了一些格式,将值转换为实际DateTime
对象,如下所示。
Get-ADUser -Filter * -SearchBase 'DC=example,DC=com' -Prop msDS-UserPasswordExpiryTimeComputed |
Select Name,@{L='PassExpiry';
E={[DateTime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}
现在,您可能会注意到,部分用户的 PassExpiry 列中没有任何内容。这很可能是因为他们的密码配置为永不过期,而转换为 DateTime 的 FileTime 值超过了 DateTime 的最大值,因此转换失败。如果您正在计算或排序这些过期值,则结果中不包含空值通常会有所帮助。因此,我们可以在自定义选择语句中添加更多条件逻辑,然后将这些值设置为日期时间.最大值。
Get-ADUser -Filter * -SearchBase 'DC=example,DC=com' -Prop msDS-UserPasswordExpiryTimeComputed |
Select Name,@{L='PassExpiry';E={
$ft = $_.'msDS-UserPasswordExpiryTimeComputed';
if ($ft -gt [DateTime]::MaxValue.ToFileTime()) {
[DateTime]::MaxValue
} else {
[DateTime]::FromFileTime($ft)
}
}}
答案2
首先获取用户名列表。
然后,您可以使用 DOS/Batch 检索他们的密码到期日期,如下所示:
net user %USERNAME% /domain
您还可以搜索在特定时间范围内(例如 90 天)所有用户的到期时间:
Search-ADAccount -AccountExpiring -TimeSpan 90.00:00:00 | where {$_.ObjectClass -eq 'user'} | FT Name,ObjectClass –A
一个不错的办法是将其更改为超过任何用户存在的天数,这样您就可以获得所有用户及其到期日期。例如:
Search-ADAccount -AccountExpiring -TimeSpan 9999999.00:00:00 | where {$_.ObjectClass -eq 'user'} | FT Name,ObjectClass –A
这是另一种方法:
对于 2003/2008,请使用来自http://www.quest.com/powershell/activeroles-server.aspx 并使用以下语法:
Get-QADUser -Name * | select givenName,sn,name,PasswordExpires
最后您可以添加 | Export-CSV c:\userpass_expiration.csv 将结果导出到文件。
对于 2008 R2 使用以下语法:
Get-ADUser -Name * | select givenName,sn,name,PasswordExpires