Главная

Wednesday, 13 June 2018

Ловим двойников в AD по атрибуту email.

Всем привет.

Случается такое что у двух юзеров в AD указан один и тот же адрес email. То ли замене была, то ли кто-то уволился. Не важно. Мне надо срочно таких двойников отловить.

Пишем скрипт. Идея такова чтобы выбрать вначале все адреса по OU в файл List.txt.
А после парсить каждый OU по email-адресам из этого же файла на предмет совпадения где более одного. Название OU передадим параметром на вход powershell.

Скрипт test1.ps1:

$OU = $args[0]
$OU

#получаем список пользователей  OU с непустыми адресами в файл List.txt
get-ADUser -SearchBase $OU -Filter {(EmailAddress -like '*')} -Properties EmailAddress | Select EmailAddress,SamAccountName,Name,Enabled | ft -hidetableheaders | out-file List.txt -Encoding Oem

$Users = gc "list.txt" -Encoding Oem

"==========================================" | Out-File -FilePath dub.txt -Append
"Looking for email double addresses of AD-users in:" | Out-File -FilePath dub.txt -Append
$OU | Out-File -FilePath dub.txt -Append
"==========================================" | Out-File -FilePath dub.txt -Append

foreach ($Email in $Users)
 {
$User = $Email
IF ($Email.Length -ge 1)   
{
#вырезаем адрес и считаем количество его совпадений
        $Email = $Email.Substring(0,$Email.IndexOf(" "))
$EmailCount = (get-ADUser -SearchBase $OU -Filter {EmailAddress -like $Email} -Properties EmailAddress).count

#если совпадений более одного пишем этого юзера в файл dub.txt
         IF ($EmailCount -ge 1) { $User + ":" + $EmailCount | Out-File -FilePath dub.txt -Append }
        }
 }

А сам вызов для подразделения "OU=Support,DC=forza,DC=local" выглядит так:
powershell -NoProfile -ExecutionPolicy bypass -File test1.ps1 "OU=Support,DC=forza,DC=local"

Успехов.


No comments:

Post a Comment

А что вы думаете по этому поводу?