
У меня есть скрипт, с помощью которого я хотел бы динамически отправлять электронное письмо, содержащее некоторую информацию, определенным людям в зависимости от того, кто в компании запускает скрипт, с помощью 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