ActiveDirectory 사용자를 기반으로 Powershell 스크립트에서 여러 수신자에게 전자 메일 보내기

ActiveDirectory 사용자를 기반으로 Powershell 스크립트에서 여러 수신자에게 전자 메일 보내기

일부 정보가 포함된 이메일을 동적으로 보내고 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 cmdlet을 활용하려고 하는데 전자 메일을 수신자에게 특정 형식으로 보내야 합니다.

단일 수신자는 다음과 같습니다.

"John Doe <[email protected]>"

여러 수신자가 다음과 같아야 합니다.

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

$To의 결과 형식은 다음과 같으므로 문제는 까다롭습니다.

이메일 주소:[이메일 보호됨]

이메일 주소:[이메일 보호됨]

이 형식은 위에 표시된 대로 다중 수신자 예시로 변환되어야 합니다.

데이터를 올바르게 가져오고 형식을 지정하고 Send-Mailmessage에서 사용할 수 있는 형식으로 유지하는 방법을 잃어버렸습니다.

요약 - ActiveDirectory의 특정 OU에 있는 각 사용자의 이메일 주소를 파악하고 Send-MailMessage를 사용하여 보낼 수 있도록 해당 이메일 주소의 형식을 지정하는 방법이 필요합니다.

답변1

ActiveDirectory 사용자를 기반으로 Powershell 스크립트에서 여러 수신자에게 전자 메일 보내기

이 형식은 위에 표시된 대로 다중 수신자 예시로 변환되어야 합니다.

데이터를 올바르게 가져오고 형식을 지정하고 Send-Mailmessage에서 사용할 수 있는 형식으로 유지하는 방법을 잃어버렸습니다.

ActiveDirectory의 특정 OU에 있는 각 사용자의 이메일 주소를 가져와 Send-MailMessage를 사용하여 보낼 수 있도록 해당 이메일 주소의 형식을 지정하는 방법이 필요합니다.

다음은 논리가 가져오는 계정의 이메일 주소 속성에 대한 NULL 값을 제외하고 쉼표로 구분된 값으로 출력을 가져오는 PowerShell 논리입니다.

걱정하지 않아도 된다고 명시한 논리(예: $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

관련 정보