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

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

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

то, что у меня до сих пор что-то вроде этого:

function SendEmail 
{ 
Send-MailMessage -To $Recipients -From "Info <noreply@domain.com>" -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 <doe.john@domain.com>"

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

"John Doe<doe.john@domain.com>", "Jane Doe <doe.jane@domain.com>"

вопрос хитрый, то в результате $To в формате:

значение emailaddress: doe.john@domain.com

EmailAddress: doe.jane@domain.com

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

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

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

27
задан cyborgcommando0
18.12.2022 1:24 Количество просмотров материала 3562
Распечатать страницу

1 ответ

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

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

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

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

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

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

  • Пожалуйста, обратите внимание на формат Send-MailMessage С -To параметр прекрасно работает с форматом doe.john@domain.com,doe.jane@domain.com таким образом, каждый адрес электронной почты с только локальной части почтового ящика и доменное имя, разделенные запятыми достаточно.

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

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

function SendEmail 
{ 
Send-MailMessage -To $Recipients -From "Info <noreply@domain.com>" -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 <noreply@domain.com>" -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
1
отвечен Pimp Juice IT 2022-12-19 09:12

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх