Автоматизируем ведение большого количества пользователей в AD

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Автоматизируем ведение большого количества пользователей в AD:

Добрый день! В этой статье я бы хотел описать применённое мной практическое решение по автоматизации одной рутинной задачи второй линии технической поддержки одного крупного предприятия.

Имеем два территориально распределённых домена AD по 10 000 человек, применённое решение по организации Веб-доступа к удаленным рабочим столам через приложения RemoteApp с несколькими интегрированными информационными системами и активно пополняющиеся база, человек так на 500 в месяц. На ~24 в рабочий день, на ~3 человека в час.

Первая очевидный вывод из входных данных – на таком количестве пользователей один админ не справится, у него должно быть право заболеть/уйти в отпуск не парализовав предприятие. А практика показывает, что и два не справляются.

Вторая проблема – идентификация личностей, допустим на файловых ресурсах предприятия, как это часто бывает, имеется информация, не предназначенная для посторонних глаз, и соответственно необходимо проверять каждого запросившего доступ на внесение в Active Directory и предоставления определённых групп доступа. К сожалению, без бюрократии в решении этого вопроса обойтись не удалось. Процедура сводится к подаче бумажной заявки в форме максимально стандартизированной, за подписью (желательно электронной) руководителя заявляющего и одобрением данного документа лицами знакомыми лично с подписантом.

После одобрения стандартизированной заявки остается дело за малым, внести людей в AD, присвоить необходимые группы доступа, и внести в excel табличку. Последний пункт может показаться немного архаичным, ведь AD вполне себе поддерживает аудит изменений, но моя практика показывает, что на таком обороте этот пункт не является лишним, а даже упрощает процесс поиска граблей в случае разбора полётов, который не редко возникает, следуя из первого вывода.

Но процесс можно немного автоматизировать, применив пару нехитрых скриптов. Логика сводится к обратному процессу:
1) Утверждаем стандарт внесения Учётных Записей в AD на предприятии
2) Запрашиваем у пользователя данные едином формате.
image
3) Вносим в таблицу основные данные, например:
4) Экспортируем из Excel в CSV файл, автоматически сгенерированную страницу, пригодную для автоматического занесения в AD при помощи скриптов
5) Экспортируем и вуаля! Остаётся передать логин и пароль пользователю.
Возможно описанные мной методы нельзя назвать best practice, однако они позволяют на практике решить существующую проблему без написания отдельно информационной системы и создания большого количества интеграций.

Далее я опишу пару технических моментов и опубликую скрипты которыми пользуюсь:
Так выглядит таблица пригодная для импорта в AD:

image
У меня эта таблица генерируется автоматически из предыдущей, пример прилагаю.
Сохранять таблицу пригодную для импорта необходимо в формате CSV (разделитель – запятые)
image

Как вы думаете какими будут разделители если открыть сгенерированный файл блокнотом? Неправильно. Такими – «;»

Отдельно в моей реализации следует остановиться на столбце транслит. В утверждённом нами стандарте часть полей заполняется транслитом по утверждённому образцу и чтобы не делать это каждый раз я использовал vba скрипт, вот он:
Function TranslitText(RusText As String) As String
    Dim RusAlphabet As Variant 'массив из букв русского алфавита
    RusAlphabet = Array("-", "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я")
 
    Dim EngAlphabet As Variant 'массив из букв английского алфавита
    EngAlphabet = Array("-", "a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "y", "", "e", "yu", "ya", "A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "Y", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Y", "", "E", "Yu", "Ya")
     
    Dim EngText As String, Letter As String, Flag As Boolean
             
    For i = 1 To Len(RusText) 'цикл по всем символам русского текста
        Letter = Mid(RusText, i, 1)
        Flag = 0
        For j = 0 To 67 'цикл по всем буквам русского алфавита
            If RusAlphabet(j) = Letter Then 'если символ из текста совпал с буквой из русского алфавита...
                Flag = 1
                If RusAlphabet(j) = Letter Then 'проверка на регистр (верхний или нижний)
                    EngText = EngText & EngAlphabet(j) '... то добавляем соответствующую букву из английского алфавита
                    Exit For
                Else
                    EngText = EngText & UCase(EngAlphabet(j))
                    Exit For
                End If
            End If
        Next j
        If Flag = 0 Then EngText = EngText & Letter 'если символа из текста в алфавите нет (например, знаки препинания и т.п.), то добавляем символ без изменения
    Next i
    TranslitText = EngText
End Function


Не делайте как я, пожалуйста, используйте один из существующих стандартов транслитерации по ссылке habr.com/ru/post/499574

Следующий же скрипт помещённый в файл с расширением .ps1 позволит вам в пару кликов закинуть все учётные записи из сгенерированного на предыдущем шаге файла в AD, как бы много их там не было. А заодно и навесить на все созданные УЗ группу ad-group.
Import-Module activedirectory 
Import-Csv "C:\generated.csv" -Encoding default -Delimiter ';'| ForEach-Object {
New-ADUser -Server DOMEN.RU -Name $_.FirstName `
-DisplayName $_.DisplayName `
-GivenName $_.GivenName `
-Surname $_.LastName `
-Initials $_.Initials `
-OfficePhone $_.Phone `
-Description $_.Description `
-UserPrincipalName $_.UserPrincipalName `
-SamAccountName $_.samAccountName `
-Email $_.mail `
-Path "OU=TEST_OU,OU=Guest,OU=Users,OU=DOMEN,DC=DOMEN,DC=RU" `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) -Enabled $true 
Set-ADuser $_.samAccountName -ChangePasswordAtLogon $True 
Add-AdGroupMember -Identity ad-group  -Members $_.samAccountName
} 
Источник: https://habr.com/ru/post/553666/


Интересные статьи

Интересные статьи

На сегодняшний день сетевой администратор или инженер ИБ тратит уйму времени и сил, чтобы защитить периметр сети предприятия от различных угроз, осваивает все новые системы предотвра...
Traefik — это обратный прокси-сервер с открытым исходным кодом, обеспечивающий простую работу с микросервисами и/или просто контейнерами с вашими приложениями. Обратный прокси-сервер...
Публикую первую главу лекций по теории автоматического управления, после которых ваша жизнь уже никогда не будет прежней. Лекции по курсу «Управление Техническими Системами», читает...
Прошлые части цикла «Введение в SSD» поведали читателю про историю появления SSD-накопителей, интерфейсы взаимодействия с ними и популярные форм-факторы. Четвёртая часть расскажет о хранении да...
Каждый лишний элемент на сайте — это кнопка «Не купить», каждая непонятность или трудность, с которой сталкивается клиент — это крестик, закрывающий в браузере вкладку с вашим интернет-магазином.