Já tentou inverter a sua pesquisa? Com sorte, um profissional de LDAP deve ser capaz de ajudar a colocar o 'estrondo', pode ser assim, eu apenas coloquei seu filtro em (!...)
:
$filter = '(!(&(objectCategory=person)(objectClass=user) (!accountExpires=9223372036854775807) (!accountExpires=0)))'
$Users = Get-ADUser -LDAPFilter $filter
Surpreende-me que não exista uma propriedade para "IsExpired". No entanto, você pode criar o array e filtrá-lo até a data de expiração. Assim:
#List of filters, each one is a string,
#by default use single quotes unless you need to force evaluation.
#Make sure each property used is in the '-Properties' part or a default property.
$Filters = 'AccountExpires -eq $True', "AccountExpirationDate -gt $(Get-Date)"
$Users = Get-ADUser -Filter * -Properties AccountExpires, AccountExpirationDate
Foreach ($filter in $filters) {
$Users = $Users | where $filter
}
Eu não sei como encontrar as senhas vazias.