
我有一個腳本,我想透過 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 可以使用的格式。
TL;DR - 需要有一種方法來取得 ActiveDirectory 中給定 OU 中每個使用者的電子郵件地址,並格式化該/那些電子郵件地址,以便可以使用 Send-MailMessage 發送
答案1
基於 ActiveDirectory 使用者從 Powershell 腳本向多個收件者發送電子郵件
此格式需要轉換為多個收件者範例,如上所示。
我不知道如何正確獲取資料、格式化資料並確保它保持 Send-Mailmessage 可以使用的格式。
需要有一種方法可以取得 ActiveDirectory 中給定 OU 中每個使用者的電子郵件地址,並格式化該/那些電子郵件地址,以便可以使用 Send-MailMessage 發送
以下是 PowerShell 邏輯,用於取得逗號分隔值的輸出,不包括您的邏輯取得的那些帳戶的電子郵件地址屬性的 NULL 值。
我測試並確認這種格式在我的環境中按預期工作,而不使用您聲明不用擔心的邏輯(例如$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