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

 

#Какую группу мониторить
$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="This email address is being protected from spambots. You need JavaScript enabled to view it."
        $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