Хотя вы можете выполнить Get-ADUser -Filter *
, а затем отфильтровать учетные записи на стороне клиента, это каждый раз передает по сети все пользовательские объекты из AD, но вы немедленно отбрасываете 99% из них. Когда в каталоге много пользовательских объектов, это пустая трата.
Я бы предпочел позволить серверной стороне фильтровать объекты, чего можно добиться с помощью фильтра LDAP. Фильтр для «все просроченные учетные записи, которые включены» будет выглядеть следующим образом:
(&
(AccountExpires>=1)
(AccountExpires<=637154628247641991)
(!(UserAccountControl:1.2.840.113556.1.4.803:=2))
)
т.е. AccountExpires>=1
И AccountExpires<={current date}
И НЕ Account is disabled
. Последняя часть выглядит несколько запутанной, но не слишком сложной:
В PowerShell мы можем настроить и использовать этот фильтр следующим образом. Отключение уязвимых учетных записей - это всего лишь вопрос передачи их в Disable-ADAccount
$filterString = "
(&
(AccountExpires>=1)
(AccountExpires<=$([DateTime]::Now.ToFileTime()))
(!(UserAccountControl:1.2.840.113556.1.4.803:=2))
)" -replace "`r`n"
Get-ADUser -LDAPFilter $filterString | Disable-ADAccount -WhatIf
. -replace "`r`n"
необходим только потому, что Get-ADUser
требователен к символам новой строки в строке фильтра LDAP.