我有一个脚本,我想通过 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