Была решена задача по нахождению изменений в составе групп Active Directory. Результат -каждому новому члену этой группы высылается письмо.

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

Работает как и обычно через командлеты компании Quest.

Алгоритм работы простой  до безобразия. Получаем список членов группы, сравниваем с файлом, где хранится старая информация о составе группе. Если появился новый сотрудник, то отправляем ему письмо.

cls
#Какую группу мониторить
$GroupName = "G_monitoring"
#Куда сохранять файл с прошлыми сотрудниками.
$PathToSaveFile="d:\temp\users.txt"
 
#Функция отправки почты
function Send-mail ($subj = "hello new staff" ,$body = "bla bla bla", $recipient)
    {
        $SMTPClient = new-object System.Net.Mail.SMTPClient
        $Msg = new-object System.Net.Mail.MailMessage
 
        $Msg.To.Add($recipient)
        $Msg.from="welcome@domain.ru"
        $Msg.Subject = $subj
        $Msg.Body= $body
        $SMTPClient.Host="192.168.0.10"
        $SMTPClient.Send($Msg)
    } 
 
#подключаю оснастку Quest.ActiveRoles.ADManagement для вменяемой работы с AD
Add-PSSnapin Quest.ActiveRoles.ADManagement
 
#Получаем список пользователей в группе
$UsersInGroup=(Get-QADGroup $GroupName).Members
 
#Подгружаем старые данные из файла
#Если файла не существует, то скрипт не отрабатывает,
# но текущее состояние группы записывается в файл, для следующего запуска.
if ((Test-Path -path $PathToSaveFile) -ne $True)
{
    write-host "No file. It's first run."
}
else
{ 
 
    $OldusersInGroup = Get-Content $PathToSaveFile
 
    #Сравниваем их содержимое.
    foreach ($User in $UsersInGroup)
    {
        #запускаем цикл. будем проверять вхождение User в массиве данных,
        #подгруженным из файла, где у нас старая копия данных о составе
        #$user
        $isNew=1
 
        for ($i=0; $i -lt ($OldusersInGroup.Length) ; $i++)
        {
            if ($user -eq $OldusersInGroup[$i])
            {
                $isNew=0
                break
            }
        }
 
        if ($isNew -eq 1)
        {
           Send-mail -recipient (Get-QADUser $user).email
        }
    }
 
}
 
#записывает текущее состояние сотрудников в группе
$UsersInGroup | Out-File $PathToSaveFile


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

  1. Однажды уже писал под такую задачу. Если быть точнее то письмо с подтверждением о предоставлении доступа к ресурсу.

    Там был набор групп в файле + список шаблоном на HTML с картинками внутри. При добавлении пользователя в группу мониторинга ему отсылалось красивое письмо с картинкой в котором было описание того какие ему доступны блага.

  2. Баканов Денис @ 2010-11-24 20:40

    Если не сложно, то выложите тут или у себя на ресурс, с ссылкой в эти коменты. Будет из чего выбирать :-)

  3. Как выйду на работу (сейчас в отпуске) выложу у себя в блоге.

Добавить новый комментарий