Enviar e-mail do script Powershell para vários destinatários com base no usuário do ActiveDirectory

Enviar e-mail do script Powershell para vários destinatários com base no usuário do ActiveDirectory

Eu tenho um script que gostaria de enviar dinamicamente um e-mail contendo algumas informações e ir para determinadas pessoas com base em quem na empresa está executando o script, graças ao ActiveDirectory.

Eu tenho outra parte do código que detecta de qual UO o usuário ou conta de serviço está executando isso, portanto, por causa desta questão, não se preocupe com isso.

O que tenho até agora é algo assim:

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

Estou tentando utilizar o cmdlet Send-MailMessage, mas os emails precisam ser enviados em um formato específico aos destinatários.

Um único destinatário é:

"John Doe <[email protected]>"

Vários destinatários devem ser parecidos com:

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

O problema é complicado porque o resultado de $To está no formato:

Endereço de email:[e-mail protegido]

Endereço de email:[e-mail protegido]

Este formato precisa ser convertido para o exemplo de múltiplos destinatários conforme mostrado acima.

Não sei como capturar os dados corretamente, formatá-los e garantir que permaneçam no formato que o Send-Mailmessage pode usar.

DR - É necessário que haja uma maneira de capturar o(s) endereço(s) de e-mail de cada usuário(s) em uma determinada UO no ActiveDirectory e formatar esse(s) endereço(s) de e-mail para que possam ser enviados usando Send-MailMessage

Responder1

Enviar e-mail do script Powershell para vários destinatários com base no usuário do ActiveDirectory

Este formato precisa ser convertido para o exemplo de múltiplos destinatários conforme mostrado acima.

Não sei como capturar os dados corretamente, formatá-los e garantir que permaneçam no formato que o Send-Mailmessage pode usar.

É necessário que haja uma maneira de capturar o(s) endereço(s) de e-mail de cada usuário(s) em uma determinada UO no ActiveDirectory e formatar esse(s) endereço(s) de e-mail para que possam ser enviados usando Send-MailMessage

Abaixo está a lógica do PowerShell para obter a saída nos valores separados por vírgula, excluindo valores NULL para as propriedades de endereço de e-mail das contas que sua lógica captura.

Testei e confirmei que este formato funciona conforme o esperado em meu ambiente, sem usar a lógica que você declara para não se preocupar (por exemplo $OUDetected).

  • Observe que o formato Send-MailMessagecom o -Toparâmetro funciona perfeitamente com um formato de modo que cada endereço de e-mail com apenas a parte da caixa de correio local e o nome de domínio separados por vírgulas é suficiente.[email protected],[email protected]

eu vou colocarMeu exemplo de trabalhoabaixo e vou colocar oSeu exemploabaixo com base no que você forneceu e como pude confirmar que funcionou bem no meu caso.

Seu exemplo (com minha lógica de trabalho adicionada)

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

Seu exemplo (iterado para endereços)

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
}

Meu exemplo de trabalho

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

informação relacionada