оповещение пользователей о необходимости смены пароля через Orchestrator 2012
Привет.
Хочу поделиться маленьким, но достаточно нужным автоматическим процессом в любой организации, где есть пользователи, работающие с сетью исключительпо через Wi-Fi. Проблема заключается в том, что после конца периода использования пароля пользователи, работающие через Wi-Fi, подключиться к сети уже не могут и изменить пароль, соответственно, тоже. Таким образом получаем недовольного пользователя, простой в работе и заявку в сервисдеск.
Предлогаемое решение — это оповещение о необходимости смены пароля за 10 дней до конца срока действия. Оповещение — раз в день по почте.
Ранее использовался скрипт на vbs и scheduled task, но время идет и нужно соответствовать 🙂 . При очередном разворачивании в новой инфраструктуре было принято решение перенести данный функционал в Orchestrator 2012.
Для работы необходимо:
1. На Runbook сервере, где будет работать runbook, установить Active Directory Powershell Module
2. Добавить в Orchestrator Active Directory Integration Pack
Для начала создадим стркутуру папок. Советую иметь строгую иерархию в любой системе.
Например, вот такую:
Создадим runbook, например, Password expire.
Первым элементом в нашем runbook будет Run .Net Script:
Этот скрипт на powershell будет получать из Active Directory значение Maximum Password Age.
$Value = powershell{
import-module ActiveDirectory
(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
}
Следующая задача — получить список пользователей, которые работают через Wi-Fi.
В данной инфраструктуре доступ к сети предоставляется на основании AD группы.
Нам нужно ее distinguishedname, например, CN=WiFiAccess-Users,OU=Groups,DC=example,DC=com.
Добавляем второй элемент в наш runbook Get User:
Не забываем настроить подключение к Active Directory:
И коротко параметры этого элемента:
Вам следует вставить свой distinguishedname в разделе Filters -> IndirectMemberOf. И вполне очевидно, что мы отбираем учетные записи, у которых есть почтовый адрес, они активны и их пароль имеет срок использования.
Теперь нам остается проверить, что
MaxPwdAge — (разница в днях между Current DataTime — Password Last Set (это возвращаемое значение из элемента Get User)) меньше 10
Если условие выполняется, будем отправлять оповещение.
Снова используем Run .Net Script в теле script, производим манипуляции со строками 🙂
Текущее время и время Password Last Set это строки
Вот такие:
2015-07-11T01:54:08
2015-07-14T16:03:20
Перевести это в дату проще простого.
[datetime] «2015-07-11T01:54:08»
Берем разницу в днях и передаем её дальше для проверки.
$datediff = [datetime] «здесь подставляем Current DataTime»- [datetime] «Password Last Set»
$PwdDaysLeft = — $datediff.days
Важно: обратите внимание на кавычки «, если вы используете в скрипте значение типа string, всегда заключайте его в кавычки.
Вот как это выглядит у меня:
И данные, которые передаем на проверку:
Добавляем последний элемент нашего runbook.
Это Send Email
Хочу обратить внимание на поле Message. По моему скромному мнению, наиболее читаемый вариант — это html.
Сформируйте простенький шаблончик и вставьте код в поле Message. Не забываем на вкладке Advancеd указать Format HTML:
У меня получилось вот так. Я оставил только кол-во дней. По желанию можно добавить FullName пользователя, многие свойства его учетной записи из Active Directory.
Если вы были внимательны, то обратили внимание на 47 дней! Мы же хотели оповещение, если менее 10 дней.
Для этого нужно добавить проверку в link, связывающий два последних элемента, вычисление и отправку почты:
Это условие по умолчанию. Изменим его на следующее:
И для красоты переименуем link-и.
Остался последний штрих — добавить scheduler:
Заключительный вид:
Это был пример простого runbook. Дальше будет интереснее!
Александр Петлевой
[…] […]
Спасибо, давно ждал хороших примеров на русском. Пишите еще!
у нас этот функционал реализован на powershell. пишите ещё, интересно же 🙂
«через 47 дней».
А если будет «3 дня», «1 день». Еще надо и такую обработку делать.
Пожалуйста
Нужно добавить в [Calculate PwdDaysLeft]
switch ($PwdDaysLeft)
{
1 {$days_desc = «день»}
2 {$days_desc = «дня»}
3 {$days_desc = «дня»}
4 {$days_desc = «дня»}
default {$days_desc = «дней»}
}
И передать вычисленное значение дальше.
Спасибо за статью, обязательно попробую.
Про новый Блог: смена тематики только на пользу, ведь все мы админим не только SCCM, но и другие продукты System Center. Женя, удачи на новом месте!
Я бы и дальше занимался только SCCM, но жизнь меня толкает в объятия SCOM.:)
Спасибо!
Тематика SCOM в рунете раскрыта слабо. Хорошие статьи не помешали бы.
А что именно интересует?
А можно ли автоматически генерировать новый пароль, если человек все же не поменяет пароль в установленный срок?
Можно, только зачем. Как вы его отправите пользователю?
Например пользователь проигнорировал письма, в этом случае система автоматически сменила бы пароль за пользователя в день Х.
Новый пароль генерируется заранее и отправляется на почту пользователя, за 1-2 дня(по желанию больше).
В день X пользователь может открыть почту и увидеть свой новый пароль.