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

如何修改PowerShell事件触发邮件脚本以添加事件发生时间

如何修改PowerShell代码在告警邮件中添加事件时间

现有一段PowerShell代码可在特定事件触发时发送告警邮件,但邮件内容缺少事件发生的日期时间,需求是在邮件中添加格式化的事件时间并将其加粗显示,目标格式如下:

EventID: 4771
Source: Microsoft-Windows-Security-Auditing
**Date: 25/11/2022 10:02**
MachineName: server.domain 
Message: user blocked.

修改步骤及完整代码

需要完成三个关键调整:

  • 从事件对象中提取并格式化事件时间
  • 在邮件正文中加入加粗的时间行
  • 修正原代码中的变量名笔误($MachineQ应为$MachineName)

修改后的完整代码:

$EventId = 4771
$A = Get-WinEvent -MaxEvents 1 -FilterHashTable @{Logname = "System" ; ID = $EventId}
$Message = $A.Message
$EventID = $A.Id
$MachineName = $A.MachineName
$Source = $A.ProviderName
# 提取并格式化事件时间为dd/MM/yyyy HH:mm格式
$EventTime = $A.TimeCreated.ToString("dd/MM/yyyy HH:mm")

$EmailFrom = "email@domain.com"
$EmailTo = "email@domain.com"
# 修正变量名$MachineQ为$MachineName
$Subject ="Alert From $MachineName"
# 在Body中添加加粗的时间行,同时修正换行符(原代码中n缺少反引号)
$Body = "EventID: $EventID`nSource: $Source`n**Date: $EventTime**`nMachineName: $MachineName `nMessage: $Message"

$SMTPServer = "smtp.server"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

关键说明

  1. 事件时间提取:Get-WinEvent返回的对象包含TimeCreated属性,通过ToString("dd/MM/yyyy HH:mm")将其格式化为需求的日期时间样式。
  2. 邮件正文格式:使用**包裹时间行实现加粗效果,同时确保换行符使用`n(反引号+n),否则邮件内容不会自动换行。
  3. 变量修正:原代码中$MachineQ是未定义的变量,需替换为实际获取的$MachineName,否则邮件主题和正文会显示空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:25:29