
該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 將為 null。
大多數情況下,AccountExpirationDate 也會為空,因為管理員不常使用該設定。在對日期進行有意義的比較之前,您需要檢查它們是否不為空。
如果您想包含從未登入的使用者帳戶,只需刪除 LastLogonDate 上 $Null 的檢查即可...但這意味著您將看到可能是昨天創建的帳戶,只是還沒有機會登入。在這種情況下,為了補償,請新增檢查以WhenCreated -LT (Get-Date).AddDays(-90)
確保僅取得 90 天前已建立但從未登入的帳戶。
要真正回答有關Search-ADAccount
cmdlet 的問題...不,請使用不同的 cmdlet,這些開關是互斥的。