Автоматизируем ведение большого количества пользователей в 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

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

Следующий же скрипт помещённый в файл с расширением .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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *