如何在PowerShell中保留Robocopy输出格式并正常邮件发送?
问题分析
你遇到的格式丢失问题,核心原因是邮件客户端默认以HTML格式渲染内容,而Robocopy的输出是依赖固定空格对齐的纯文本等宽格式——HTML会自动合并连续空格和换行,导致原本对齐的表格完全乱掉。
两种解决方案
方案1:发送纯文本邮件(最简单直接)
直接让邮件以纯文本形式发送,就能完整保留Robocopy输出的原始格式。只需要在发送邮件时指定-BodyAsHtml $false,同时把你捕获的$roboresult数组转换成带换行的字符串:
# 先把字符串数组转换成带换行的完整文本 $roboBody = $roboresult -join "`r`n" # 发送纯文本邮件(替换成你的实际邮箱和SMTP配置) Send-MailMessage -To "recipient@yourdomain.com" -From "sender@yourdomain.com" -Subject "Robocopy 执行结果" -Body $roboBody -BodyAsHtml $false -SmtpServer "smtp.yourdomain.com"
方案2:发送HTML邮件并保留格式(兼顾美观)
如果需要HTML邮件的样式支持,同时保留Robocopy的格式,可以把输出包裹在HTML的<pre>标签里(<pre>标签会强制保留文本的原始空格、换行和等宽排版):
# 把输出转换成带<pre>标签的HTML内容 $roboBody = "<pre>$($roboresult -join "`r`n")</pre>" # 发送HTML邮件(替换成你的实际邮箱和SMTP配置) Send-MailMessage -To "recipient@yourdomain.com" -From "sender@yourdomain.com" -Subject "Robocopy 执行结果" -Body $roboBody -BodyAsHtml $true -SmtpServer "smtp.yourdomain.com"
关键细节说明
- 你的
$roboresult是Select-Object返回的字符串数组,直接作为邮件Body的话,PowerShell会把数组元素用逗号拼接,所以必须用-join "rn"转换成带换行的完整文本。 <pre>标签默认使用等宽字体,完美匹配Robocopy的表格对齐逻辑,主流邮件客户端都会原样渲染。
内容的提问来源于stack exchange,提问作者Heyvoon
相关产品推荐
相关产品推荐

