Получаем список членов группы, сравниваем с файлом, где хранится старая информация о составе группе. Если появился новый сотрудник, то отправляем ему письмо.
#Какую группу мониторить $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