В статье «Создание более сложных запросов к AD», опубликованной в Windows IT Pro/RE №2 за 2012 год, я рассказывал о том, как с помощью средств PowerShell находить учетные записи пользователей Active Directory (AD), отвечающих определенному критерию – заблокированных, не регистрировавшихся в системе на протяжении заданного времени, имеющих имена, начинающиеся с определенной буквы и т.д. В статье «Дуэты команд PowerShell для управления Active Directory», опубликованной в № 3 за 2013 год, описаны команды, позволяющие выполнить с найденными учетными записями определенные действия – разблокировать, выключить или включить, изменить атрибут и т.д.
Ранее также отмечалось, что имена команд PowerShell имеют структуру «действие-объект» (например, get-aduser). . Нетрудно догадаться, что командой удаления учетной записи является remove-aduser. Основной синтаксис команды прост:
remove-aduser identity
Здесь identity работает так же, как и в командах get-aduser и set-aduser, то есть позволяет указать DN (cn=AprilJones,CN=users,dc=bigfirm,dc=com), SID (S-1-5-21-941799636-306785290-3997453140-1106), GUID объекта (c5959b71-61f9-4497-81a6-c147639a33b0) или SAM-имя учетной записи (AprilJones). Однако от большинства команд для работы с AD remove-aduser отличается тем, что требует подтверждения. В ответ на команду удаления выдается примерно такой запрос:
Вы действительно хотите выполнить это действие?
Выполнение операции «Remove» над целевым объектом «CN=AprilJones,CN=Users,
DC=bigfirm,DC=com».
[Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка
(по умолчанию «Y"):
Для подтверждения удаления необходимо нажать «Ввод». Для удаления сразу многих учетных записей с помощью remove-aduser можно построить такую цепочку:
Search-ADAccount -AccountDisabled -UsersOnly | remove-aduser
Эта команда предписывает найти и удалить все выключенные учетные записи. Не советую, однако, применять ее в рабочей сети. Если такой запрос ввести в домене, насчитывающем 1000 выключенных учетных записей, будьте готовы к тому, что клавиша «Ввод» придет в негодность.
Как сделать так, чтобы команда remove-aduser не требовала подтверждения? В этом отношении PowerShell можно воспринимать двояко. С одной стороны, команды обычно предусматривают выдачу запроса на подтверждение действий с высоким риском, и это хорошо. Однако, как ни странно, для того чтобы проинформировать PowerShell о том, что вы знаете, что делаете, и нет необходимости нажимать «Ввод», в некоторых случаях применяется параметр -force, например для команды stop-process:
stop-process -name»SomeService«
Если SomeService – процесс, выполняемый под учетной записью, которая не является вашей основной, как в случае большинства служб, то PowerShell требует подтверждения, как и remove-aduser. В этом случае сделать так, чтобы PowerShell не выдавал запрос на подтверждение, можно только с помощью параметра force:
stop-process -name»SomeService«-force
Однако если параметр -force поставить в конец команды remove-aduser, то будет выдано сообщение об ошибке: «Параметр с именем force не найден». Следует отметить, что это сообщение – более понятное, чем многие другие сообщения об ошибках PowerShell. Здесь задачу отмены выдачи требования решает параметр -confirm:
remove-aduser AprilJones -confirm:$false
Лично мне вторая форма нравится больше, поскольку -confirm работает как внутренний флаг, который в случае $true предписывает PowerShell применять «предстартовую проверку», прежде чем выполнить действие, а в случае $false дает PowerShell указание хранить молчание и выполнять, что сказано. Итак, всегда следует помнить: если -confirm:$false не прекращает выдачу запросов на подтверждение, то это сделает -force, и наоборот. Кроме того, подобно большинству «опасных» команд, remove-aduser имеет параметр -whatif, информирующий о том, что было бы сделано без -whatif.
Убедиться в уничтожении учетной записи просто:
get-aduser AprilJones
Можно также провести дополнительное исследование. Вам, вероятно, известно, что удаление учетной записи AD не означает фактического стирания объекта пользователя из AD, но лишь предполагает очистку большей части атрибутов объекта и маркировку его как удаленного. При этом создается объект-захоронение, остающийся в AD в течение определенного времени (по умолчанию, 180 дней). Для просмотра объектов-захоронений используется команда с более широкими возможностями, чем get-aduser, а именно, get-adaccount. Его синтаксис аналогичен синтаксису get-aduser, однако имеется дополнительный параметр includedeletedobjects (сокращаемый до -inc), позволяющий вывести захороненные объекты, в противном случае остающиеся скрытыми. Таким образом, поиск «останков» удаленной учетной записи выглядит следующим образом:
get-ADObject -inc -f {samaccountname -eq»AprilJones"}
Выполнив этот запрос, вы убедитесь, что удаленный пользователь не исчез бесследно, и его учетную запись можно в определенной степени восстановить. Однако об этом мы поговорим в следующий раз.