Enviar email do script Powershell para vários destinatários com base no usuário ActiveDirectory

1

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

Eu tenho outra parte do código que detecta qual OU o usuário ou a conta de serviço está executando, de modo que, por causa dessa pergunta, não se preocupe com isso.

O que eu 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 para os destinatários.

Um único destinatário é:

"John Doe <[email protected]>"

Vários destinatários devem ser semelhantes:

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

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

EmailAddress: [email protected]

EmailAddress: [email protected]

Este formato precisa ser convertido para o exemplo de vários destinatários, conforme mostrado acima.

Não sei como coletar os dados corretamente, formatá-los e ter certeza de que eles permaneçam no formato que o Send-Mailmessage pode usar.

TL; DR - Precisa haver uma maneira de pegar o (s) endereço (s) de e-mail de cada usuário em uma determinada UO no ActiveDirectory e formatar esse (s) endereço (s) de e-mail para que ele possa enviar usando Send-MailMessage

    
por cyborgcommando0 26.01.2016 / 02:06

1 resposta

1

Send E-Mail from Powershell Script to Multiple Recipients based on ActiveDirectory User

This format needs to be converted to the multiple recipient example as shown above.

I am at a loss at how to properly grab the data, format it and be sure it stays in the format that Send-Mailmessage can use.

There needs to be a way that grabs the email address(es) of each user(s) in a given OU in ActiveDirectory and format that/those email address(es) so it may send using Send-MailMessage

Abaixo, a lógica do PowerShell para obter a saída nos valores separados por vírgulas excluindo os valores NULL das propriedades de endereço de email dessas contas que sua lógica captura.

Eu testei e confirmei que esse formato funciona como esperado no meu ambiente sem usar a lógica com a qual você declara não se preocupar (por exemplo, $OUDetected ).

  • Observe que o formato Send-MailMessage com o parâmetro -To funciona muito bem com um formato de [email protected],[email protected] , portanto, cada endereço de e-mail com apenas a parte da caixa de correio local e o nome do domínio separados por vírgulas é suficiente.

Vou colocar o meu exemplo de trabalho abaixo e vou colocar o seu exemplo abaixo com base no que você deu e como eu pude confirmar que funcionou bem em 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
    
por 26.01.2016 / 05:15