Search-ADAccount cmdlet具有交换机-AccountDisabled , -AccountExpired和-AccountInactive ; 其结果可能并不相互排斥,也不是包容性的。
即昨天被禁用但仅在一周内停用的账户,如果我们的时间间隔为-90天,则可能不会显示为禁用。 相反,尚未被禁用但尚未被使用的帐户将显示为不活动,但未被禁用。
有没有办法使用这些开关列出所有禁用,过期OR不活动的帐户; 或者我必须运行三个查询,然后做一个| select * -unique | select * -unique删除重复?
这是我该怎么做的。
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的一次调用只获取我们需要的属性。 包括已禁用或已过期的所有用户(非常见设置)或“不活动”。
请注意,如果用户帐户已创build但用户从未login,LastLogonDate将为空。
AccountExpirationDate在大多数情况下也将为空,因为pipe理员不经常使用该设置。 你需要检查他们不是空的,才能对他们进行有意义的比较date。
如果您想包含从未login过的用户帐户,只需删除LastLogonDate上$ Null的支票…但这意味着您将看到昨天可能创build的帐户,但尚未有机会login。 ..在这种情况下,为了补偿,添加一个检查WhenCreated -LT (Get-Date).AddDays(-90) ,以确保只获得90天前创build的帐户,但从未login。
要真正回答您有关Search-ADAccount cmdlet的问题,请使用其他cmdlet,这些开关是互斥的。