We rise up for the things we believe in over and over again

Недавно обнаружил странную особенность в поведении скрипта обработки учеток уволенных сотрудников. Предполагается, что учетная запись будет вышвырнута из всех групп, кроме базовой Domain Users, после чего заблокирована. Странность в том, что на одних учетках эта процедура отрабатывает на ура (в том числе и на моей тестовой), а на других - на первый взгляд не работает вообще. Вот как это реализовано:
(get-qaduser $user).memberof | Get-QADGroup | where {$_.name -ne "domain users"} | Remove-QADGroupMember -member $user
Начинаем разбор полетов. Берем учетную запись, уже отключенную ранее, видим, что в свойствах AD групп там перечислено довольно много. Понятно, скрипт не отработал. Загоняем данные этой учетки в переменную $user, запускаем строку на исполнение, и видим прекрасное:
Remove-QADGroupMember : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
Уже интереснее. В голове тут же формируется мысль о том, что сотрудник этот сидит не только в группах нашего домена, но и соседнего, а в свойствах учетки через ADUC такие группы не видны. Что ж, даем следующее:
$col = (get-qaduser $user).memberof | Get-QADGroup | where {$_.name -ne "domain users"}
$col

Так и есть. Кучка групп из других доменов. Скрипт натыкался на такую группу, получал отлуп и прекращал обработку всех групп у этой учетки, переходя к остальным процедурам. Надо исправить:
$colGroups = (get-qaduser $user).memberof | Get-QADGroup | where {$_.name -ne "domain users"}
foreach ($group in $colGroups) { Remove-qadgroupmember -identity $group -member (get-qaduser $user) }

К чему приведет? Скрипт по прежнему будет нарываться на группы соседнего домена, но теперь будет пропускать лишь итерации цикла удаления групп, а не всю коллекцию разом. Что и требовалось.

@музыка: Medwyn Goodall - Snows of Kilimanjaro

@темы: PowerShell, Scripting

Комментарии
09.10.2012 в 18:36

Слова "не надо нервничать" хорошо помогают привести человека в нормальное состояние бешенства.
Хм... Вообще-то в memberof primary группа не содержится. Или это Quest'овский командлет так поиздевался над выводом?
09.10.2012 в 19:53

We rise up for the things we believe in over and over again
Cybeon, честно, не проверял, решил перестраховаться. Да и тех.задание было, убрать все, кроме этой группы. Решил в кои-то веки сделать все так, как запрошено.
Хотя я вообще не понимаю смысла этого всего. Выгнать из групп рассылок - да, спору нет. Убить все атрибуты для query-based рассылок - аналогично. Но как по мне - полумеры все это. Убивать такие учетки надо, и дело с концом. А то плодится мусор в AD...
11.10.2012 в 13:40

Слова "не надо нервничать" хорошо помогают привести человека в нормальное состояние бешенства.
Насчет убивать я с тобой не согласен. Сложить в какой-то отдельный контейнер - возможно. Дело в том что учетке могут быть выданы права где-то на сетевых ресурсах. Если ты ее убьешь, то понять кому были выданы права довольно сложно, т.к. все что у тебя будет это SID несуществующей учетки, которая принадлежала неизвестно кому.
11.10.2012 в 13:49

We rise up for the things we believe in over and over again
Сложить в какой-то отдельный контейнер
Что и делается. Но ведь мусор же!
могут быть выданы права где-то на сетевых ресурсах
Где-то я встречал упоминание нехитрого правила - для раздачи прав на шары используйте группы и только группы. Никаких индивидуальных настроек.
Понимаю, что это описание идеальной среды, на практике без индивидуального доступа практически не обойтись. Но все же, но все же...
11.10.2012 в 15:19

Слова "не надо нервничать" хорошо помогают привести человека в нормальное состояние бешенства.
>>Что и делается. Но ведь мусор же!
Ну мусор, и что? Пока он лежит в специально отведенном месте и не путается под ногами ничего страшного в этом нет.
>>для раздачи прав на шары используйте группы и только группы
Вот когда я буду уверен на 100% что у меня гигде никакая собака на свои документы не раздаст права индивидуально на учетки (Ты не забыл что creator/owner по умолчани имеет full Control?) Тогда я подумаю над тем чтоб учетки удалять.
11.10.2012 в 15:30

We rise up for the things we believe in over and over again
creator/owner по умолчани имеет full Control
Не забыл. Но у нас эта сущность убрана из всех ACL, а максимальный уровень прав, который имеют "простые смертные" - Modify