You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell Send-MailMessage发送AD查询结果邮件格式异常如何解决

问题根因
  • 代码同时使用了纯文本格式化逻辑和HTML邮件参数:Format-Table + Out-String生成的是控制台适配的纯文本内容,加上-BodyAsHtml参数后,HTML渲染会自动合并所有换行、连续空格,导致纯文本表格结构被打散,所有内容挤压到一起。
  • 冗余查询逻辑:Get-ADUser使用-Properties *会拉取用户所有AD属性,大幅降低查询效率,仅需指定你需要用到的属性即可。
修复方案

有两种可选实现,按需选用:

方案1:发送带美观表格的HTML格式邮件(推荐)

直接将查询到的AD用户对象转为HTML表格,无需经过纯文本格式化步骤,修复后的完整代码如下:

# 服务器2012+未安装RSAT工具时可先执行下面命令安装组件
# Add-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory

$emailto = 'markbuehler@milgard.com'
$emailfrom = 'markbuehler@milgard.com'
$emailsubject = "持有有效ipPhone属性的禁用AD用户清单"
$smtp_server = 'corp-smtp01.milgardwindows.com'

# 仅拉取需要的属性,提升查询效率
$disabledusers = Get-ADUser -SearchBase "OU=MIMilgardUsersandComputers,DC=milgardwindows,DC=com" `
-Filter {Enabled -eq $false -and ipPhone -like "*"} `
-Properties Name,UserPrincipalName,Office,ipPhone | `
Select-Object Name,UserPrincipalName,Office,ipPhone

# 生成带基础样式的HTML邮件内容
$htmlBody = $disabledusers | ConvertTo-Html -Property Name,UserPrincipalName,Office,ipPhone `
-Title $emailsubject `
-PreContent "<h3>$emailsubject</h3>" `
-PostContent "<p>统计时间:$(Get-Date -Format 'yyyy年MM月dd日 HH:mm:ss')</p>" | Out-String

# 发送HTML格式邮件
Send-MailMessage -To $emailto -From $emailfrom -Subject $emailsubject -SmtpServer $smtp_server `
-Body $htmlBody -BodyAsHtml

方案2:发送纯文本格式邮件

如果不需要HTML样式,直接删除-BodyAsHtml参数即可,纯文本内容会保留原有的换行和表格缩进:

# 仅修改发送邮件的命令即可,其余逻辑不变
Send-MailMessage -To $emailto -From $emailfrom -Subject $emailsubject -SmtpServer $smtp_server `
-Body ($disabledusers | Out-String)

内容的提问来源于stack exchange,提问作者Milgard Sharepoint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:45:03