В дополнение к указанию SearchBase в моем фильтре get-aduser у меня есть фильтр LDAP, который находит только отключенные учетные записи (мы программно отключаем учетные записи, поэтому для всех отключенных учетных записей существует единственное значение userAccountControl), как я иногда видел администраторы (ошибочно) прячут активного пользователя в нашей специализированной OU отключенного пользователя.
Фильтр также ограничивает результаты для отключенных пользователей, которые являются членами некоторой группы, чтобы избежать повторной обработки людей в каждом цикле обработки пакета. Это позволяет мне иметь другую безопасность - пакет удаляет членство в группах только в том случае, если найдено «разумное» количество новых отключенных учетных записей, и отправляет мне оповещение по электронной почте, если в поиске возвращается слишком много пользователей. То, что является «разумным», зависит от того, сколько людей становятся инвалидами в период между запусками. Когда мы делаем большое увольнение, мне нужно войти и вручную набрать номер, чтобы очистить пару сотен учетных записей ... но это спасло нас, когда бастующие рабочие стали инвалидами (они не должны были входить в систему, но нет один хотел стереть все членство в группе).
После того, как вы получили отключенных пользователей, переберите их значения memberOf, чтобы удалить группы.
$objDisabledUsers=Get-ADUser -SearchBase "OU=DisabledUsers,DC=example,DC=com" -LDAPFilter "(&(userAccountControl=514)(memberOf=*)(objectCategory=person))" -Properties name, sAMAccountName, memberOf
if($objDisabledUsers.Count -lt 10){
foreach($objUser in $objDisabledUsers){
$objGroupMemberships = $objUser.memberOf
foreach($strGroup in $objGroupMemberships){
write-host "Removing $objUser from $strGroup"
Remove-ADGroupMember -Identity $strGroup -Members $objUser.SamAccountName -Confirm:$false
}
}
}