habrahabr

Автогенерация powershell-скриптов

  • понедельник, 1 сентября 2014 г. в 03:10:32
http://habrahabr.ru/company/d-lera/blog/234979/

Все рано или поздно приходят к желанию переложить занудную и однообразную работу на «плечи» компьютера. Например, ко мне это чувство пришло, когда я начал внедрять Active Directory в организации на 100+ сотрудников. Добавлять и заполнять все поля для большого числа пользователей вручную — ужасно нудное и долгое занятие. Конечно, первым делом я обратился к powershell, но процесс написание скрипта как-то уж слишком затянулся и в конечном счете ничего путного не вышло. Мечты иметь красивый и аккуратный каталог пользователей так и остались мечтами. Пока я не загорелся идеей автоматизации создания powershell-скриптов.

Миллионы администраторов по всему миру, так же, как и я, ловят одни и те же баги в тысячах одинаковых скриптов для одних и тех же стандартных задач. Просто удивительно, что до меня ни один из них не решился закрыть этот вопрос раз и навсегда, создав автогенератор poweshell-скриптов. Если мы можем разворачивать десяток серверов в день, то научить компьютер писать скрипт без ошибок — точно не проблема.

Ближе к делу


Короче говоря, я собрал такой автогенератор скрипта и он готов к бета-тестированию. Называется он d-lera (d-lera.com) и главная его функция — устранение стадии написания кода скрипта, самого долгого и утомительного процесса при использовании powershell. Вместо этого администратор заполняет достаточно простую форму — по этим данным готовый powershell-сценарий генерируется и сохраняется автоматически.

Проект еще только-только вылупился, и сейчас умеет генерировать простой и удобный скрипт для создания пользователей в Active Directory. Признаюсь, от хабражителей в комментариях хочется услышать, что сейчас работает неккоректно и какие функции нужны «на полях» в первую очередь. Поехали?

RTFM.txt


На простом примере, покажу как все работает. Предположим, у нас есть организация с незамысловатым названием «Котейкины дрова». В ней есть два отдела «Мохнатая пилорама» и «Усатая бухгалтерия», В первом отделе один номер телефона, а второй пусть распологается сразу в двух кабинетах, в каждом из которых свой телефон.

Получается такая структура:



Стоит обратить внимание. что данная структура не обязательно должна повторять структуру подразделений в Active Directory.

Открываем страницу http://d-lera.com/adusercreate, нажимаем «Создать организацию», вводим название. Создается корневое подразделение, в котором автоматически заполняется атрибут «Организация»:


В поле «Адрес в каталоге» вводим адрес корневого подразделения (Organisation Unit) в каталоге Active Directory, где мы храним пользователей. Адрес домена добавлять не надо. Настраиваем атрибуты, которые одинаковые для всей организации: адрес, адрес сайта, параметры учетной записи.


После чего добавляем два отдела «Мохнатая пилорама» и «Усатая бухгалтерия». При создании подразделений копируются все настройки родителя, но некоторые атрибуты обновляются автоматически:

Заполним так же руководителей отделов (вводить надо логин учетной записи руководителя отдела без префикса домена) и теневые группы, а для «Мохнатой пилорамы» заполняем еще телефон и кабинет:
Теневые группы
Иногда же необходимо, что бы учетные записи сотрудников всего отдела являлись членами какой-либо группы безопасности. При заполненном параметре «Теневая группа» после создания учетной записи сгенерированный сценарий будет автоматически добавлять её в указанную группу



А теперь воспользуемся тем, что при создании скрипта структура подразделений не обязательно должна оответствовать структуре подразделений в каталоге Active Directory. В «усатой бухгалтерии» создаем два дочерних подразделения: «Усатая бухгалтерия: сметанная комната» и «Усатая бухгалтерия: комната с клубками ниток» и каждому из них заполняем свой телефон и кабинет:

Не забываем, что при создании дочерних подразделений некоторые поля заполняются автоматически. Вручную удаляем добавленные уровни адреса, а для названия отдела выбираем «обновить все дочерние подразделения» в «Усатой бухгалтреии»:

И тут мы вдруг вспоминаем, что при создании учетной записи хотим вводить e-mail, а еще конечно же пароль. Поэтому в «Котейкины дрова» отмечаем чекбокс для ручного ввода должности и пароля и обновляем все дочерние подразделения (обновляются только непосредственные наследники, поэтому для «Усатой бухгалтерии» надо так же жать на кнопку обновления):


И на последок: в «Котейкины дрова» и «Усатой бухгалтерии» снимем галочку «Резрешить создание пользователей в данном подразделении», что бы скрипт не предлагал там создавать пользователей:

Никому не хочется раскрывать сразу все сведения о домене организации на первом попавшемся сайте в интернете, поэтому после сохранения скрипта его необходимо открыть любым текстовым редактором и поправить первые две строчки, введя название вашего домена Active Directory. Сохраняем, запускаем:




Планы на ближайшее будущее


  • Возможность сохранения конфигурации
  • Подписывание скриптов. Сейчас они генерируются неподписанными. Как самостоятельно подписать можно прочитать, например, здесь
  • Конструкторы атрибутов: что бы, например, логин автоматически составлялся по шаблону на основе имени и фамилии и переводился с русского в транслит
  • Комбинированный ввод многозначных атрибутов: введенное значение + предустановленное значение (например ввод индивидуального внутреннего номера телефона + общий городской номер)
  • Сценарии для обновления существующих пользователей, создания пользователей из файла Excel или .CSV
  • Добавление кастомных атрибутов пользователя Active Directory
  • Поддержка Exchange, SharePoint
  • Изучение и добавление сценариев для различных других стандартных задач


P.S. Приглашаю всех потестить и буду очень благодарен за любые пожелания / предложения / замечания. Писать можно на admin@d-lera.com, в личку, в комментариях и вообще где угодно — мы же в интернете все-таки

Т.к. сведения о каталоге Active Directory организации являются информацией достаточно интимного характера, то очень важно Ваше мнение:
Как бы Вы хотели видеть сохранение конфигурации подразделений?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Проголосовало 104 человека. Воздержалось 63 человека.