如何修改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)
关键说明
- 事件时间提取:
Get-WinEvent返回的对象包含TimeCreated属性,通过ToString("dd/MM/yyyy HH:mm")将其格式化为需求的日期时间样式。 - 邮件正文格式:使用
**包裹时间行实现加粗效果,同时确保换行符使用`n(反引号+n),否则邮件内容不会自动换行。 - 变量修正:原代码中
$MachineQ是未定义的变量,需替换为实际获取的$MachineName,否则邮件主题和正文会显示空值。
内容的提问来源于stack exchange,提问作者Atp
相关产品推荐
相关产品推荐

