我一直在使用Powershell脚本来生成Windows备份事件的电子邮件。 问题是格式看起来不好。
Subject: Computer name status [backup was successful] Tuesday, December 29, 2015 2:55 AM Index : 19160 EntryType : Warning InstanceId : 4099 Message : Backup was cancelled. Category : (0) CategoryNumber : 0 ReplacementStrings : {} Source : Windows Backup TimeGenerated : 29-Dec-15 12:42:35 PM TimeWritten : 29-Dec-15 12:42:35 PM UserName :
我想要一个丰富多彩的HTML报告。
这是脚本
$Event = Get-eventlog -log application -Newest 1 -source "Windows Backup" $Status= $Event.Message $From = "[email protected]" $To = "[email protected]" $SMTPServer = "smtp" $SMTPPort = "port" $Username = "email" $Password = "***" $Subject = "$computer, $status" $Body = $event | format-list | out-string $smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort); $smtp.EnableSSL = $false $smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password); $smtp.Send($From, $To, $subject, $body); $computer = "$env:computername"
您要做的关键变化是在对象到string的转换过程中。 现在,您正在使用format-list ,您希望使用不同的转换器,例如FormatTo-HTML cmdlet。 以下是关于FormatTo-HTML的technet文章和来自ss64.com的FormatTo-HTML的一些文档
你可以用-cssuri引用一个css文件,但是这只是作为一个链接包含的,所以使用本地文件并不是特别有用。 相反,您可以在传递到-head标志的string中包含html <style/>元素。
FormatTo-HTML有其局限性,例如不会产生交替的着色风格,但可能适合您的需要。
此外,您需要在消息上设置IsBodyHTML属性。 为此,您需要创build一个MailMessage对象,而不是使用System.Net.Mail.SmtpClient::Send为您创build一个。 例如:
$mailMsg = new-object System.Net.Mail.MailMessage $From $To $mailMsg.Subject = "$computer, $status" $mailMsg.IsBodyHTML = $true $mailMsg.Body = $event | FormatTo-HTML -title "System Status for $computer" | out-string $smtp.Send($mailMsg)