使用Search-ADAccount查找未设置帐户到期日期的所有帐户

时间:2019-03-06 04:52:40

标签: powershell

Powershell中是否可以列出域中未设置帐户到期日期的所有AD帐户?也就是说,帐户过期日期设置为“从不”。

我可以利用Get-ADuser获取单个帐户的到期时间。

get-aduser username | Select-Object -Property name,Enabled,AccountExpirationDate,DistinguishedName | Where-Object {$_.AccountExpirationDate -eq '`n'}

但是,有没有一种方法可以使用“ Search-ADAccount -AccountExpiring .....”来获取域中未设置帐户到期日期的所有帐户的列表,或者采用一种更好的方法?

当我使用以下命令时,我没有得到任何退货信息,但是我设置了未设置有效期限(即从不)的测试帐户来测试该命令,但是该帐户未显示在结果中。

Search-ADAccount -AccountExpiring | Select-Object -Property name,AccountExpirationDate | Where-Object {$_.AccountExpirationDate -eq '`n'}

2 个答案:

答案 0 :(得分:1)

Get-ADUser解决方案

如果使用正确的过滤器,您仍然可以使用Get-ADUser查找帐户:

Get-ADUser -Filter {-not(AccountExpirationDate -like "*") } -Properties AccountExpirationDate | Select-Object -Property name,Enabled,AccountExpirationDate,DistinguishedName

这将为您提供没有为属性AccountExpirationDate设置任何值的每个帐户。


使用Search-ADAccount解决方案

如果您仍然想使用Search-ADAccount,则必须提供一个时间戳,直到帐户到期(take a look at the ref)。没有选项可以搜索没有设置任何值的帐户。您始终必须提供某种DateTime。

例如,如果要查找在2周内到期的所有帐户,则必须选择:

第一

帐户过期日期的解决方案:

Search-ADAccount -AccountExpiring -DateTime ((Get-Date).AddDays(14))

第二:

在帐户过期之前剩余几天的解决方案:

Search-ADAccount -AccountExpiring -Timespan "14"

答案 1 :(得分:0)

我找到了结合上述Paxz答复和此Technet thread的解决方案。 'AccountExpirationDate'很难在不导出每个用户帐户过期日期并将其格式化为可读的日期时间字符串的情况下有效地从广告中滤除。

上面链接的Technet文章解释说,“ accountExpires AD属性是一个大整数(64位),表示日期(以UTC为单位),表示自1601年1月1日上午12:00以来的100纳秒间隔。 AccountExpirationDate参数是一种属性方法,可将accountExpires的值转换为本地时区中的相应日期”。根据其他研究,将帐户设置为“永不过期”时,其“帐户过期”整数为9223372036854754775807。

“ Get-ADUser”可用于过滤所有“ accountexpires”整数等于“ 9223372036854775807”的帐户。这样就无需为域中每个帐户的日期进行转换。

Get-ADUser -filter {Enabled -eq 'True' -and accountexpires -eq '9223372036854775807'} | Select-Object name,enabled,accountexpires,distinguishedName