[Системное администрирование, PowerShell, Лайфхаки для гиков] Автоматизируем ведение большого количества пользователей в AD
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Автоматизируем ведение большого количества пользователей в AD:
Добрый день! В этой статье я бы хотел описать применённое мной практическое решение по автоматизации одной рутинной задачи второй линии технической поддержки одного крупного предприятия.
Имеем два территориально распределённых домена AD по 10 000 человек, применённое решение по организации Веб-доступа к удаленным рабочим столам через приложения RemoteApp с несколькими интегрированными информационными системами и активно пополняющиеся база, человек так на 500 в месяц. На ~24 в рабочий день, на ~3 человека в час.
Первая очевидный вывод из входных данных – на таком количестве пользователей один админ не справится, у него должно быть право заболеть/уйти в отпуск не парализовав предприятие. А практика показывает, что и два не справляются.
Вторая проблема – идентификация личностей, допустим на файловых ресурсах предприятия, как это часто бывает, имеется информация, не предназначенная для посторонних глаз, и соответственно необходимо проверять каждого запросившего доступ на внесение в Active Directory и предоставления определённых групп доступа. К сожалению, без бюрократии в решении этого вопроса обойтись не удалось. Процедура сводится к подаче бумажной заявки в форме максимально стандартизированной, за подписью (желательно электронной) руководителя заявляющего и одобрением данного документа лицами знакомыми лично с подписантом.
После одобрения стандартизированной заявки остается дело за малым, внести людей в AD, присвоить необходимые группы доступа, и внести в excel табличку. Последний пункт может показаться немного архаичным, ведь AD вполне себе поддерживает аудит изменений, но моя практика показывает, что на таком обороте этот пункт не является лишним, а даже упрощает процесс поиска граблей в случае разбора полётов, который не редко возникает, следуя из первого вывода.
Но процесс можно немного автоматизировать, применив пару нехитрых скриптов. Логика сводится к обратному процессу:
1) Утверждаем стандарт внесения Учётных Записей в AD на предприятии
2) Запрашиваем у пользователя данные едином формате.
3) Вносим в таблицу основные данные, например:
4) Экспортируем из Excel в CSV файл, автоматически сгенерированную страницу, пригодную для автоматического занесения в AD при помощи скриптов
5) Экспортируем и вуаля! Остаётся передать логин и пароль пользователю.
Возможно описанные мной методы нельзя назвать best practice, однако они позволяют на практике решить существующую проблему без написания отдельно информационной системы и создания большого количества интеграций.
Далее я опишу пару технических моментов и опубликую скрипты которыми пользуюсь:
Так выглядит таблица пригодная для импорта в AD:
У меня эта таблица генерируется автоматически из предыдущей, пример прилагаю.
Сохранять таблицу пригодную для импорта необходимо в формате CSV (разделитель – запятые)
Как вы думаете какими будут разделители если открыть сгенерированный файл блокнотом? Неправильно. Такими – «;»
Отдельно в моей реализации следует остановиться на столбце транслит. В утверждённом нами стандарте часть полей заполняется транслитом по утверждённому образцу и чтобы не делать это каждый раз я использовал 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
}
===========
Источник:
habr.com
===========
Похожие новости:
- [Настройка Linux, DevOps, DIY или Сделай сам, Kubernetes] Как я сломал и починил кластер Kubernetes, работающий на Raspberry Pi (перевод)
- [Лайфхаки для гиков, Здоровье] Как можно (правильно) прокрастинировать, чтобы повысить свою продуктивность
- [Информационная безопасность, Киберпанк, Лайфхаки для гиков, Транспорт] Анонимность в современном мегаполисе
- [Системное администрирование, Системное программирование, DevOps] Что такое модули Terraform и как они работают? (перевод)
- [Информационная безопасность, Обработка изображений, Машинное обучение, Искусственный интеллект] Ковидная индустрия и системы распознавания
- [Системное администрирование, Серверное администрирование, Резервное копирование, Софт] Детектив с Кластером Hyper-V: шаг за шагом ищем решение проблемы
- [Анализ и проектирование систем, Управление персоналом, Карьера в IT-индустрии, Лайфхаки для гиков] Должен ли системный аналитик вторгаться на чужую территорию?
- [Python, Обработка изображений, Машинное обучение, Лайфхаки для гиков] Как удалить татуировку с помощью глубокого обучения (перевод)
- [Git, Хранение данных, Лайфхаки для гиков] Знакомьтесь, pass (перевод)
- [Карьера в IT-индустрии, Лайфхаки для гиков, Удалённая работа] Как найти удаленную работу в зарубежной компании. 10 шагов
Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_powershell, #_lajfhaki_dlja_gikov (Лайфхаки для гиков), #_vba, #_powershell, #_avtomatizatsija_rutiny (автоматизация рутины), #_avtomatizatsija (автоматизация), #_active_directory, #_predprijatija (предприятия), #_sistemnoe_administrirovanie (
Системное администрирование
), #_powershell, #_lajfhaki_dlja_gikov (
Лайфхаки для гиков
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 13:56
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Автоматизируем ведение большого количества пользователей в AD: Добрый день! В этой статье я бы хотел описать применённое мной практическое решение по автоматизации одной рутинной задачи второй линии технической поддержки одного крупного предприятия. Имеем два территориально распределённых домена AD по 10 000 человек, применённое решение по организации Веб-доступа к удаленным рабочим столам через приложения RemoteApp с несколькими интегрированными информационными системами и активно пополняющиеся база, человек так на 500 в месяц. На ~24 в рабочий день, на ~3 человека в час. Первая очевидный вывод из входных данных – на таком количестве пользователей один админ не справится, у него должно быть право заболеть/уйти в отпуск не парализовав предприятие. А практика показывает, что и два не справляются. Вторая проблема – идентификация личностей, допустим на файловых ресурсах предприятия, как это часто бывает, имеется информация, не предназначенная для посторонних глаз, и соответственно необходимо проверять каждого запросившего доступ на внесение в Active Directory и предоставления определённых групп доступа. К сожалению, без бюрократии в решении этого вопроса обойтись не удалось. Процедура сводится к подаче бумажной заявки в форме максимально стандартизированной, за подписью (желательно электронной) руководителя заявляющего и одобрением данного документа лицами знакомыми лично с подписантом. После одобрения стандартизированной заявки остается дело за малым, внести людей в AD, присвоить необходимые группы доступа, и внести в excel табличку. Последний пункт может показаться немного архаичным, ведь AD вполне себе поддерживает аудит изменений, но моя практика показывает, что на таком обороте этот пункт не является лишним, а даже упрощает процесс поиска граблей в случае разбора полётов, который не редко возникает, следуя из первого вывода. Но процесс можно немного автоматизировать, применив пару нехитрых скриптов. Логика сводится к обратному процессу: 1) Утверждаем стандарт внесения Учётных Записей в AD на предприятии 2) Запрашиваем у пользователя данные едином формате. 3) Вносим в таблицу основные данные, например: 4) Экспортируем из Excel в CSV файл, автоматически сгенерированную страницу, пригодную для автоматического занесения в AD при помощи скриптов 5) Экспортируем и вуаля! Остаётся передать логин и пароль пользователю. Возможно описанные мной методы нельзя назвать best practice, однако они позволяют на практике решить существующую проблему без написания отдельно информационной системы и создания большого количества интеграций. Далее я опишу пару технических моментов и опубликую скрипты которыми пользуюсь: Так выглядит таблица пригодная для импорта в AD: У меня эта таблица генерируется автоматически из предыдущей, пример прилагаю. Сохранять таблицу пригодную для импорта необходимо в формате CSV (разделитель – запятые) Как вы думаете какими будут разделители если открыть сгенерированный файл блокнотом? Неправильно. Такими – «;» Отдельно в моей реализации следует остановиться на столбце транслит. В утверждённом нами стандарте часть полей заполняется транслитом по утверждённому образцу и чтобы не делать это каждый раз я использовал 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 } =========== Источник: habr.com =========== Похожие новости:
Системное администрирование ), #_powershell, #_lajfhaki_dlja_gikov ( Лайфхаки для гиков ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 13:56
Часовой пояс: UTC + 5