Отправка электронной почты из скрипта Powershell нескольким получателям на основе пользователя ActiveDirectory

Отправка электронной почты из скрипта Powershell нескольким получателям на основе пользователя ActiveDirectory

У меня есть скрипт, с помощью которого я хотел бы динамически отправлять электронное письмо, содержащее некоторую информацию, определенным людям в зависимости от того, кто в компании запускает скрипт, с помощью ActiveDirectory.

У меня есть еще одна часть кода, которая определяет, из какого OU пользователь или учетная запись службы запускает это, так что ради этого вопроса не беспокойтесь об этом.

У меня пока получилось что-то вроде этого:

function SendEmail 
{ 
Send-MailMessage -To $Recipients -From "Info <[email protected]>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}

 $To = Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected | Format-List EmailAddress | Out-String

Я пытаюсь использовать командлет Send-MailMessage, но электронные письма должны отправляться получателям в определенном формате.

Единым получателем является:

"John Doe <[email protected]>"

Несколько получателей должны выглядеть так:

"John Doe<[email protected]>", "Jane Doe <[email protected]>"

Проблема усложняется, поскольку результат $To имеет следующий формат:

Адрес электронной почты:[email protected]

Адрес электронной почты:[email protected]

Этот формат необходимо преобразовать в пример с несколькими получателями, как показано выше.

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

TL;DR - Должен быть способ, который извлекает адрес(а) электронной почты каждого пользователя в заданном OU в ActiveDirectory и форматирует этот/эти адрес(а) электронной почты так, чтобы его можно было отправить с помощью Send-MailMessage.

решение1

Отправка электронной почты из скрипта Powershell нескольким получателям на основе пользователя ActiveDirectory

Этот формат необходимо преобразовать в пример с несколькими получателями, как показано выше.

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

Должен быть способ, который извлекает адрес(а) электронной почты каждого пользователя в заданном OU в ActiveDirectory и форматирует этот(и) адрес(а) электронной почты, чтобы его можно было отправить с помощью Send-MailMessage.

Ниже приведена логика PowerShell для получения выходных данных в виде значений, разделенных запятыми, за исключением значений NULL для свойств адресов электронной почты тех учетных записей, которые захватывает ваша логика.

Я протестировал и подтвердил, что этот формат работает так, как и ожидалось в моей среде, без использования логики, о которой вы говорите, чтобы не беспокоиться (например $OUDetected, ).

  • Обратите внимание, что формат Send-MailMessageс -Toпараметром отлично работает с форматом , поэтому для каждого адреса электронной почты достаточно указать только часть локального почтового ящика и доменное имя, разделенные запятыми.[email protected],[email protected]

я положуМой рабочий примерниже и я поставлюВаш примерниже на основе того, что вы дали, и того, как я смог подтвердить, что это сработало нормально в моем случае.

Ваш пример (с добавлением моей рабочей логики)

function SendEmail 
{ 
Send-MailMessage -To $Recipients -From "Info <[email protected]>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}

 $To = (Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected | Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress) -join "," | Out-String

Ваш пример (повторяется по адресам)

function SendEmail 
{
Send-MailMessage -To $To -From "Info <[email protected]>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}

$ToAddresses = Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected | 
Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress

ForEach ($ToAddress in $ToAddresses) {
   $To = $ToAddress
   SendEmail
}

Мой рабочий пример

(Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress | Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress) -join "," | Out-String

Связанный контент