该Search-ADAccount
cmdlet 具有开关-AccountDisabled
、-AccountExpired
和-AccountInactive
;其结果可能不互相排斥也不相互包含。
例如,如果我们的时间跨度为 -90 天,那么昨天被禁用但仅处于非活动状态 1 周的帐户可能不会显示为已禁用。相反,尚未被禁用但一段时间未使用的帐户将显示为非活动状态但不会被禁用。
有没有办法使用这些开关列出所有已禁用、已过期的OR
非活动帐户;或者我必须运行三个查询然后执行| select * -unique
删除重复项?
答案1
以下是我的做法。
Get-ADUser -Filter * -Properties Enabled, AccountExpirationDate, LastLogonDate | ? { `
($_.Enabled -EQ $False) -OR `
($_.AccountExpirationDate -NE $NULL -AND $_.AccountExpirationDate -LT (Get-Date)) -OR `
($_.LastLogonDate -NE $NULL -AND $_.LastLogonDate -LT (Get-Date).AddDays(-90)) }
一次对 AD 的调用,仅获取我们需要的属性。包括所有已禁用、已过期(不常见的设置)或“不活跃”的用户。
请注意,如果用户帐户已创建但用户从未登录,则 LastLogonDate 将为空。
AccountExpirationDate 在大多数情况下也将为空,因为管理员不经常使用该设置。您需要检查它们是否为空,然后才能对它们进行有意义的日期比较。
如果您想要包含从未登录过的用户帐户,只需删除 LastLogonDate 上的 $Null 检查...但这意味着您将看到可能昨天创建但还没有机会登录的帐户...在这种情况下,为了补偿,添加一个检查以确保WhenCreated -LT (Get-Date).AddDays(-90)
只获取 90 天前创建但从未登录过的帐户。
实际上,要回答您有关Search-ADAccount
cmdlet 的问题……不,请使用不同的 cmdlet,这些开关是互斥的。