AD. Поиск дубликатов УЗ в ActiveDirectory

2 мин на чтение

В один прекрасный момент ваш домен в ActiveDirectory обязательно станет большим и плохо контролируемым, в нем каждый день будут создаваться новые учетные записи для вновь принятых сотрудников, старые не будут отключаться, в связи с «забывчивостью» отдела кадров. Вы с умилением будете вспоминать те времена, когда могли наизусть перечислить учетные записи сотрудников и когда со 100% уверенностью могли сказать, что искать дубликаты УЗ в своем ActiveDirectory домене Вам не нужно.
Так было и у нас в организации. Но в один прекрасный день счетчик количества учетных записей перевалил за 9000. В этот момент мы начали сомневаться: а работает ли у нас столько сотрудников?

И как обычно для решения такой нелегкой задачи на помощь приходит незаменимый для Windows-администраторов PowerShell. Итак, из главных задач мы имеем следующее:
1) Найти все полные дубли УЗ в своем домене AciveDirectory
2) Сотрудник может быть заведен без отчества в поле Name
3) Могут быть просто однофамильцы, следовательно выводить данных нужно больше
4) В разных подразделениях (читай OU) могут числиться полные тезки, но это разные люди

Исходя из этих требований и специфики создания УЗ у нас в компании был написан небольшой скрипт, который ищет дубли по первым 2-м словам в поле givenName и найденные дубли экспортирует в csv файл с заданным названием.

Get-ADUser -Filter
{sn -like "*" -and givenname -like "*"}
-Properties sn,givenname -SearchBase "OU=Users,OU=test,DC=corp,DC=domain,DC=local" |
Group-Object {$.sn.trim() + " " + $.givenname.split(" ")[0].trim()} |
Where {$_.Count -gt 1} | Select -Expand Group | Select surname,givenName,Name,DistinguishedName |
Export-Csv -NoTypeInformation C:\logs\result_test.csv -Encoding UTF8 -UseCulture