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