
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 コマンドレットを利用しようとしていますが、電子メールは特定の形式で受信者に送信する必要があります。
単一の受信者とは、次のとおりです。
"John Doe <[email protected]>"
複数の受信者の場合は次のようになります。
"John Doe
<[email protected]>", "Jane Doe <[email protected]>"
$To の結果が次の形式であるため、問題は複雑になります。
電子メールアドレス:[メールアドレス]
電子メールアドレス:[メールアドレス]
この形式は、上記に示すように、複数の受信者の例に変換する必要があります。
データを適切に取得し、フォーマットし、Send-Mailmessage が使用できる形式を維持する方法がわかりません。
TL;DR - 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