Лень — двигатель прогресса…
Вот и я, найдя немного свободного времени, решил автоматизировать достаточно рутинную для каждого админа задачу — создание и отключение пользователей.
Началось все с создания скрипта на PowerShell, где с консоли предлагалось ввести данные пользователя. В результате создавался пользователь AD в соответствующем OU, с заполненными полями.
Далее создаем почтовый ящик, который в моем случае хостится на Gmail. Благодаря этому можно использовать замечательный сервис Apps Script. В его основе лежит JavaScript. Обилие документации и небольшой опыт программирования помог разобраться с этим делом. Здесь аналогично передаем данные функции — аккаунт создан.
Этим же инструментом переделываем шаблон Welcome-письма, заменяя %username% и т.д. на реальные данные и отправляем pdf HR-ам, боссу, новому пользователю и конечно себе.
Конечно, ввод данных с двух консолей — не тот результат, который хотелось бы получить. По-этому была создана гугл-форма для данных. Скрипты добавлены в планировщик на повтор каждые 5 мин.
После отработки гугл-скрипта, через Backup and Sync (GDrive) данные ввиде текстового файла передаются в локальную сеть. Здесь за дело берется PowerShell — парсит файл и создает пользователя AD. Вот теперь красиво!
Вот и я, найдя немного свободного времени, решил автоматизировать достаточно рутинную для каждого админа задачу — создание и отключение пользователей.
1. PowerShell
Началось все с создания скрипта на PowerShell, где с консоли предлагалось ввести данные пользователя. В результате создавался пользователь AD в соответствующем OU, с заполненными полями.
$files = Get-ChildItem -LiteralPath \\server\users$ -Include *.txt -File
foreach ($file in $files) {
$text = Get-Content -Path $file.FullName
$data = $text.Split(";")
$action = $data[0]
$name = $data[1]
$lastName = $data[2]
$password = $data[3]
$project = $data[4]
$position = $data[5]
$pc = $data[6]
if ($action -eq "Add") {
createADUser $name $lastName $project $position $password $pc
}
elseif ($action -eq "Suspend") {
disableAdUser ("$name.$lastName")
}
$file.Delete()
}
function createADUser($name, $lastName, $project, $position, $password, $pc) {
$office = "Head Office"
$path = "OU=Users,DC=corp,DC=mydomain,DC=com"
$login = "$name.$lastName".ToLower()
if ($project -ne "") {
$path = "OU=$project,$path"
}
if ($password -eq "") {
$password = "12345678"
}
New-ADUser -Name "$name $lastName" -DisplayName "$name $lastName" -GivenName $name -Surname $lastName -SamAccountName $login -UserPrincipalName "$login@corp.mydomain.com" -Path $path -Enabled $true -AccountPassword (ConvertTo-SecureString -AsPlainText $password -Force)
Set-ADUser -Identity "$name.$lastName" -Department $projectName -Title $position -Office $office -ChangePasswordAtLogon $true -EmailAddress "$login@mydomain.com"
Set-ADAccountPassword -Identity "$name.$lastName" -NewPassword (ConvertTo-SecureString -AsPlainText $password -Force)
Add-ADGroupMember -Identity GroupName -Members "$name.$lastName"
if ($pc -ne "") {
Set-ADUser -Identity "$name.$lastName" -Description $pc.ToUpper()
setAdmin $pc $login
setPcConfig $pc
setPcOwner $pc $login
}
sendMail "$login has been created"
}
function disableAdUser ($user) {
$userObj = Get-ADUser -Identity $user
Set-ADUser -Identity $user -Enabled 0
Move-ADObject -Identity $userObj -TargetPath "OU=Fired_users,OU=Users,DC=corp,DC=mydomain,DC=com"
sendMail "$user has been disabled"
}
2. Google Apps Script
Далее создаем почтовый ящик, который в моем случае хостится на Gmail. Благодаря этому можно использовать замечательный сервис Apps Script. В его основе лежит JavaScript. Обилие документации и небольшой опыт программирования помог разобраться с этим делом. Здесь аналогично передаем данные функции — аккаунт создан.
Этим же инструментом переделываем шаблон Welcome-письма, заменяя %username% и т.д. на реальные данные и отправляем pdf HR-ам, боссу, новому пользователю и конечно себе.
function createUser(name, lastName, gender, groups, password, title, department) {
var userMail = email((name + "." + lastName).toLowerCase());
var admin = email("admin");
var recipients = admin + "," + email("hr") + "," + email("boss");
var subject = "Welcome! " + name + " " + lastName + " - " + title;
var body = "Welcome to the jungle";
var attachment = makeWelcome(name, lastName, password);
var resource = {
"name": {
"familyName": lastName,
"givenName": name
},
"password": password,
"primaryEmail": userMail,
"changePasswordAtNextLogin": true,
"organizations": [{
"title": title,
"department": department
}],
"gender": {
"type": gender
}
}
AdminDirectory.Users.insert(resource);
Logger.log(userMail + "'S BEEN CREATED");
for (var i = 0; i < groups.length; i++) {
addMember(groups[i], userMail);
}
var options = {
"attachments": [attachment],
"name": "Sysadmin"
}
MailApp.sendEmail(recipients, subject, body, options);
MailApp.sendEmail(userMail, "Welcome!", body, options);
}
3. UI, автоматизация
Конечно, ввод данных с двух консолей — не тот результат, который хотелось бы получить. По-этому была создана гугл-форма для данных. Скрипты добавлены в планировщик на повтор каждые 5 мин.
После отработки гугл-скрипта, через Backup and Sync (GDrive) данные ввиде текстового файла передаются в локальную сеть. Здесь за дело берется PowerShell — парсит файл и создает пользователя AD. Вот теперь красиво!
Комментарии (7)
RandDragon
09.04.2018 12:37Вот сейчас как раз пишу синхронизацию 1с ЗУП и AD. Правда реализовано все это с помощью C#. Админ ранее реализовал все это через PowerShell.
avelor
09.04.2018 21:34А если не секрет — зачем сишарп? Мне кажется, что сложнее поддерживать, нежели павершел, лазающий в 1с через ком-соединение или вызовы из 1с к ad через adsi (ком-объект).
avelor
Интересный вариант, спасибо.
Я бы только делал наоборот — данные вносим в форму в офисе (это может быть и gui, и консоль, и веб-сервис), дальше передаем данные в гугл-скрипт. Или post/get запросом, или даже спецписьмом на служебный (или не служебный) ящик. А то механизм синхронизации через gdrive выглядит не очень:)
А в идеальном мире пользователи заводятся сами при приёме на работу (выгрузкой хоть из 1с ЗУП или любой другой кадровой системы) видел правда реальный раьотающий пример только один раз, в очень крупной конторе с чёткими бизнес-процессами и дисциплиной.
braker07 Автор
Изначально так и было. Отрабатывал ps1 скрипт, отправлял письмо на Гугл-ящик, где создавался аккаунт. Но первое, что пришло в голову, удобный и быстро реализуемый UI, стала гугл-форма. С GDrive была небольшая загвоздка — он работает при выполненном входе в систему. Но добавив в планировщик, можно запускать его в фоне. Просто и стабильно.
avelor
Гуй на павершелле довольно легко реализуется. Лично я делал схожую схему в своё воемя вовсе на автоите (до павершела) :)
Ну или если со стороны гугля — то можно вебсервис простенький поднять и ловить запросы от гуглскрипта. Не очень люблю просто планировщики… впрочем, это вкусовщина.