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

PowerShell脚本问题:发送事件日志邮件仅显示System.Diagnostics.EventLogEntry(x15)

解决PowerShell邮件中事件日志内容显示异常的问题

这个问题的核心原因是你用Format-Table生成的不是纯文本内容——Format-*系列命令返回的是格式化输出对象(比如Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData),当你把这类对象直接放进字符串"$event"时,PowerShell只会输出对象的类型名称,也就是你看到的System.Diagnostics.EventLogEntry (x 15)。

下面是两种可行的解决办法:

方法1:输出纯文本格式的日志表格

用Out-String将格式化后的表格转换成纯文本字符串,这样邮件就能正确显示表格内容:

# 获取日志并转换成纯文本表格
$event = Get-EventLog -LogName System -Source "Service Control Manager" -Newest 15 | Format-Table -AutoSize | Out-String

# 发送邮件
Send-MailMessage -To "email@gmail.com" -From "script@gmail.com" -Body $event -Subject "Script log"

方法2:输出美观的HTML格式日志(推荐)

如果想让邮件内容更易读,可以用ConvertTo-Html生成HTML表格,再以HTML格式发送邮件:

# 获取日志并转换成HTML,指定要显示的字段
$eventHtml = Get-EventLog -LogName System -Source "Service Control Manager" -Newest 15 | 
             ConvertTo-Html -Property TimeGenerated, EventID, Message `
             -Title "Service Control Manager Latest Events" `
             -PreContent "<h2>Latest 15 Service Control Manager System Events</h2>"

# 发送HTML格式邮件(注意要加-BodyAsHtml参数)
Send-MailMessage -To "email@gmail.com" -From "script@gmail.com" `
                 -Body ($eventHtml -join "`n") `
                 -Subject "Script log" `
                 -BodyAsHtml

额外说明

  • Format-Table这类命令是专门为控制台输出设计的,不要用它们来生成需要保存或发送的文本内容;
  • 用ConvertTo-Html时,可以通过-Property参数指定你想展示的具体字段(比如TimeGenerated、EventID、Message),避免显示冗余信息;
  • 如果你的环境使用的是较新的PowerShell版本(5.1+或Core),也可以考虑用Get-WinEvent替代Get-EventLog,它的输出更灵活,且是微软推荐的新命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:50:54