我正在尝试获取我们域中所有用户的列表及其密码到期date服务器操作系统Windows服务器2008任何想法或build议?
有一个可爱的计算属性,你可以查询每个用户称为msDS-UserPasswordExpiryTimeComputed 。 您可以使用本地Active Directory PowerShell模块使用Get-ADUser命令来查询它,如下所示:
Import-Module ActiveDirectory Get-ADUser -Filter * -SearchBase 'DC=example,DC=com' -Prop msDS-UserPasswordExpiryTimeComputed | Select Name,msDS-UserPasswordExpiryTimeComputed
但是,该属性作为FileTime值返回,这不是非常友好的。 所以我们添加一些格式到我们的输出来把这个值转换成一个像这样的实际的DateTime对象。
Get-ADUser -Filter * -SearchBase 'DC=example,DC=com' -Prop msDS-UserPasswordExpiryTimeComputed | Select Name,@{L='PassExpiry'; E={[DateTime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}
现在您可能会注意到,您的某些用户没有列出PassExpiry列中的任何内容。 这很可能是因为他们的密码configuration为永不过期,并且FileTime值转换为DateTime超过了DateTime的最大值,转换失败。 如果您正在对这些到期值进行计算或sorting,通常在结果中没有空值是有帮助的。 所以我们可以添加更多的条件逻辑到我们的自定义select语句,只需将这些值设置为DateTime.MaxValue 。
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) } }}
首先获取用户名列表。
然后你可以像这样使用DOS / Batch来检索他们的密码到期date:
net user %USERNAME% /domain
您还可以search所有用户在特定时间范围内(例如90天)何时到期:
Search-ADAccount -AccountExpiring -TimeSpan 90.00:00:00 | where {$_.ObjectClass -eq 'user'} | FT Name,ObjectClass –A
一个很好的黑客只是将它改变为超过任何用户存在的天数,这会给你所有的用户和他们的到期date。 例:
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中的 Quest PowerShell AD模块,并使用以下语法:
Get-QADUser -Name * | select givenName,sn,name,PasswordExpires
最后你可以添加| Export-CSV c:\ userpass_expiration.csv将结果导出到文件。
对于2008 R2使用这个语法:
Get-ADUser -Name * | select givenName,sn,name,PasswordExpires