[Из песочницы] Немного сокращаем действия

Каждый администратор всегда сводит свои действия к минимуму, пишет скрипты, пишет программы и чтобы меньше делать рутинных задач приходится проявлять фантазию и поработать головой. Хочу поделиться своим опытом, может кому-то и поможет. У меня в компании сейчас малое количество сотрудников, порядка 15–18. Почта создается на сервере Zimbra, а каждый сотрудник работает под своей локальной учетной записью на компьютере. И до меня тут исторически сложилось, что AD нет.


Появилась потребность в разворачивании файлового сервера, я развернул его на базе MS Windows server 2016, из себя он представляем роль файлового сервера, где создан VMDX (виртуальный жесткий диск) который и является общим пулом для всех. По доступу все просто, создаем локальные группы и даем разрешения на группы, а далее каждого сотрудника добавляем в эти самые группы. Но заводить каждого сотрудника вручную, двигать мышкой, перещелкивать вкладки и потом еще писать письмо сотруднику с паролем и доступом, это не «тру». В итоге я написал небольшой скрипт, где из одного консольного окна мы делаем эти все действия в 4 шага.


cujl7l8wvhq3ll9lvdyajta5zl8.png


Для начала нам надо создать пользователя, создать ему пароль и добавить описание, для этого передать данные в переменные.


$login=read-host "Введите имя сотрудника" #Здесь укажем логин пользователя
$name=read-host "Введите полное имя сотрудника" #Это ФИО
$dep=read-host "Должность сотрудника" #Это поле описание
$Chars = [Char[]]"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" #Символы которые могут использоваться в пароле
$Password=($Chars | Get-Random -Count 10) -join "" #Генерируем пароль длиной в 10 символов
$date = Get-Date #Получаем дату
" $date " + "для сотрудника" + " srv-fs\" + "$login " + "создан пароль" + " $Password" >> "X:\IT\password_users.txt"
$us="$login"+"@"+"domain.net" #Собираем все в строчку и записываем в файлик


После прохождения этого блока мы получаем строчку в файле — »02/12/2018 08:18:24 для сотрудника srv-fs\testovich создан пароль a15qBci2m9», далее нужно создавать эту учетную запись.


$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force #Конвертируем сгенерированный пароль в шифрованный
New-LocalUser "$login" -Password $SecurePassword -PasswordNeverExpires -FullName "$Name" -Description "$dep" #Создаем пользователя
Add-LocalGroupMember -Group "Share" -Member "$login" #Добавляем нашего пользователя в общую группу


В итоге после прохождения следующего блока мы получаем учетную запись с группой Share.


wlo8bsvuukyjje1vk86wvnddy7a.png


А теперь отправим сотруднику данные для входа.


$EmailFrom = "srv-fs@domain.net" #От этого имени оправляем письмо
$EmailTo = "it@domain.net,$us" #Здесь мы отправляем письмо адресатам где $us - это $login"+"@"+"domain.net
$Subject = "Доступ к общему диску"
$Body = "$name" + ", вам предоставлен доступ к общему сетевому диску. Для входа используйте. " + "Имя пользователя" + " srv-fs\" + "$login " + " | Пароль" + " $Password" + "|" #Тело письма
$SmtpServer = "mx.domain.net" #Сервер отправки
$smtp = New-Object net.mail.smtpclient($SmtpServer)
$smtp.Send($EmailFrom, $EmailTo, $Subject, $Body)


На почту сотрудика придет сообщение с темой «Доступ к общему диску», а в теле письма будет
«Ivanov Ivan Testovich, вам предоставлен доступ к общему сетевому диску. Для входа используйте. Имя пользователя srv-fs\testovich | Пароль a15qBci2m9|»


Не забываем, ведь сотрудник работает в каком-то подразделении, а у нас доступ к папкам по группам, теперь нам надо добавить пользователя в нужную группу.


#Выводим список доступных отделов которые соответствуют группам, строка номер 1 соответствует первой строке групп

Write-Host ″Выберите подразделение″ -ForegroundColor Red
Write-Host ″1. Бухгалтерия″ -ForegroundColor Green
Write-Host ″2. Администраторы″ -ForegroundColor Green
Write-Host ″3. Аналитики″ -ForegroundColor Green
Write-Host ″4. Разработчики″ -ForegroundColor Green
Write-Host ″5. Отдел кадров″ -ForegroundColor Green
Write-Host ″6. IT″ -ForegroundColor Green
Write-Host ″7. Руководство″ -ForegroundColor Green
Write-Host ″8. Выход или не назначать подразделение″ -ForegroundColor Red

$choice = Read-Host ″Введите номер подразделения″ #Будем ожидать номер подразделения

Switch($choice){
  1{Add-LocalGroupMember -Group "Account" -Member "$login"}
  2{Add-LocalGroupMember -Group "Admin" -Member "$login"}
  3{Add-LocalGroupMember -Group "Analytic" -Member "$login"}
  4{Add-LocalGroupMember -Group "Developer" -Member "$login"}
  5{Add-LocalGroupMember -Group "HR" -Member "$login"}
  6{Add-LocalGroupMember -Group "IT" -Member "$login"}
  7{Add-LocalGroupMember -Group "Management" -Member "$login"}
  8{Write-Host ″Выход″; exit}
    default {Write-Host ″Неверное значение, попробуйте еще раз.″ -ForegroundColor Red}
}


kxdb6mnecd40sdayqx1gygbngmk.png


И в конце всего этого мы имеет готового пользователя с правильными группами, описанием и паролем. Сотрудник же в свою очередь получил письмо и подключился к диску, а если и нет то, это уже совсем другая история…

© Habrahabr.ru