оповещение пользователей о необходимости смены пароля через 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
Для начала создадим стркутуру папок. Советую иметь строгую иерархию в любой системе.
Например, вот такую:01 Catalog
Создадим runbook, например, Password expire.

Первым элементом в нашем runbook будет Run .Net Script:

01 FirstItem_01
Этот скрипт на powershell будет получать из Active Directory значение Maximum Password Age.

$Value = powershell{
import-module ActiveDirectory
(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
}

01 FirstItem_02

01 FirstItem_03

01 FirstItem_04

Следующая задача — получить список пользователей, которые работают через Wi-Fi.
В данной инфраструктуре доступ к сети предоставляется на основании AD группы.
Нам нужно ее distinguishedname, например, CN=WiFiAccess-Users,OU=Groups,DC=example,DC=com.
Добавляем второй элемент в наш runbook Get User:

01 SecondItem_01

 

Не забываем настроить подключение к Active Directory:

01 SecondItem_02

 

И коротко параметры этого элемента:

01 SecondItem_03 01 SecondItem_04

 

Вам следует вставить свой 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, всегда заключайте его в кавычки.

Вот как это выглядит у меня:

01 ThirdItem_01

 

И данные, которые передаем на проверку:

 

01 ThirdItem_02

 

 

Добавляем последний элемент нашего runbook.
Это Send Email

01 Forth_01

Его настройка проста:
01 Forth_02

Хочу обратить внимание на поле Message. По моему скромному мнению, наиболее читаемый вариант — это html.
Сформируйте простенький шаблончик и вставьте код в поле Message. Не забываем на вкладке Advancеd указать Format HTML:

01 Forth_03
У меня получилось вот так. Я оставил только кол-во дней. По желанию можно добавить FullName пользователя, многие свойства его учетной записи из Active Directory.

 

01 Forth_04

Если вы были внимательны, то обратили внимание на 47 дней! Мы же хотели оповещение, если менее 10 дней.

Для этого нужно добавить проверку в link, связывающий два последних элемента, вычисление и отправку почты:

01 thelast_01

Это условие по умолчанию. Изменим его на следующее:

01 thelast_02

И для красоты переименуем link-и.

01 thelast_03

Остался последний штрих — добавить scheduler:

01 thelast_04

01 thelast_05

Заключительный вид:

01 thelast_06

Это был пример простого runbook. Дальше будет интереснее!

 

Александр Петлевой

12 комментариев

  1. Andrey:

    Спасибо, давно ждал хороших примеров на русском. Пишите еще!

  2. naezd:

    у нас этот функционал реализован на powershell. пишите ещё, интересно же 🙂

  3. Иван:

    «через 47 дней».
    А если будет «3 дня», «1 день». Еще надо и такую обработку делать.

    • it.resolve:

      Пожалуйста

      Нужно добавить в [Calculate PwdDaysLeft]

      switch ($PwdDaysLeft)
      {
      1 {$days_desc = «день»}
      2 {$days_desc = «дня»}
      3 {$days_desc = «дня»}
      4 {$days_desc = «дня»}
      default {$days_desc = «дней»}
      }

      И передать вычисленное значение дальше.

  4. Павел:

    Спасибо за статью, обязательно попробую.
    Про новый Блог: смена тематики только на пользу, ведь все мы админим не только SCCM, но и другие продукты System Center. Женя, удачи на новом месте!

  5. icebeerg:

    А можно ли автоматически генерировать новый пароль, если человек все же не поменяет пароль в установленный срок?

    • it.resolve:

      Можно, только зачем. Как вы его отправите пользователю?

      • icebeerg:

        Например пользователь проигнорировал письма, в этом случае система автоматически сменила бы пароль за пользователя в день Х.
        Новый пароль генерируется заранее и отправляется на почту пользователя, за 1-2 дня(по желанию больше).
        В день X пользователь может открыть почту и увидеть свой новый пароль.

Leave a Reply to it.resolve