因此,我有以下脚本,它基本上从 robocopy 任务“导入”日志文件,然后通过电子邮件将最后 14 行(基本上是最后的统计数据)发送给我。但是我似乎无法获得正确的格式。以下是脚本:
$logfile_offsite = "C:\offsitebackup.log"
$log_contents = Get-Content $logfile_offsite
$date = Get-Date -Format g
$footer = get-content $logfile_offsite | select-object -Last 14
#Send email
$smtp_server = "smtp.server.com"
$address_to = "[email protected]"
$address_from = "[email protected]"
Send-MailMessage -SmtpServer $smtp_server -To $address_to -From $address_from -Subject " Offsite Backup $date " -Body " $footer "
所以当电子邮件通过时,看起来整洁的原始格式就被搞乱了。有什么办法可以解决这个问题吗?
答案1
在没有大量关于你的邮件客户端接收电子邮件和传输电子邮件的服务器(可能发生的任何清理工作)的详细信息的情况下,我将提供两条建议:
检查您的邮件客户端是否正在使用等宽字体。您的控制台输出可能使用固定宽度字体,而您的邮件客户端可能不会,即使是像这样的纯文本电子邮件也是如此。从这个角度来看,假设您的日志文件包含您期望的格式的文本,那么您的邮件客户端也应该如此。
帮助指南
Send-MailMessage
表明该-Body
参数需要一个 String 对象。要分辨出什么并不总是那么容易Get-Content
和Select-Object
返回,但您的情况最终会得到一个数组(集合),因为这就是您处理输入的方式。那么 CMDlet 会做什么来从字符串数组中生成单个字符串呢?也许它只是将它们连接起来而没有空格。试试这行,它将使用回车符和换行符连接字符串数组。这样您就可以告诉 PowerShell 您希望它做什么:$footer = (get-content $logfile_offsite | select-object -Last 14) -join "`r`n"