SIOS SANless clusters

SIOS SANless clusters High-availability Machine Learning monitoring

  • Home
  • 产品
    • SIOS DataKeeper for Windows
    • SIOS Protection Suite for Linux
  • 新闻与活动
  • 服务器集群简单化
  • 成功案例
  • 联系我们
  • English
  • 中文 (中国)
  • 中文 (台灣)
  • 한국어
  • Bahasa Indonesia
  • ไทย

如何使用Windows Server 2016从Windows事件触发电子邮件警报

Date: 11月 9, 2018

使用Windows Server 2016从Windows事件触发电子邮件警报

循序渐进:如何使用Windows Server 2016从包含事件详细信息的Windows事件触发电子邮件警报

介绍

从Windows事件触发电子邮件警报使用Windows Server 2016只需要几个步骤。指定触发该任务时将发生的操作。由于Microsoft已决定弃用“发送电子邮件”选项,因此我们唯一的选择是启动程序。在我们的例子中,该程序将是一个Powershell脚本,用于收集事件日志信息并对其进行解析。这样,我们就可以发送包含重要日志事件详细信息的电子邮件。此工作已在Windows Server 2016上得到验证。但我怀疑它应该适用于Windows Server 2012 R2和Windows Server 2019。如果您在任何其他平台上工作,请发表评论,如果您需要更改任何内容,请告诉我们。

步骤1-编写Powershell脚本

首先要做的是写一个Powershell脚本,运行时可以发送电子邮件。在研究这个问题时,我发现了很多方法来完成这项任务,所以我要向您展示的只是一种方式,但您可以随意尝试并使用适合您环境的方法。在我的实验室中,我没有运行自己的SMTP服务器,因此我必须编写一个可以利用我的Gmail帐户的脚本。您将在我的Powershell脚本中看到,对SMTP服务器进行身份验证的电子邮件帐户的密码是纯文本格式。如果您担心某人可能有权访问您的脚本并发现您的密码,请加密您的凭据。Gmail需要和SSL连接。 您的密码应该是安全的,就像任何其他电子邮件客户端一样。我有一个Powershell脚本的例子。与任务计划程序一起使用时,它将在Windows事件日志中记录任何指定的事件时自动发送电子邮件警报。在我的环境中,我将此脚本保存到C: Alerts DataKeeper.ps1

$ EventId = 16,20,23,150,219,220

$ A = Get-WinEvent -MaxEvents 1 -FilterHashTable @ {Logname =“System”; ID = $ EventId}
$ Message = $ A.Message
$ EventID = $ A.Id
$ MachineName = $ A.MachineName
$ Source = $ A.ProviderName


$ EmailFrom =“sios@medfordband.com”
$ EmailTo =“sios@medfordband.com”
$ Subject =“来自$ MachineName的警报”
$ Body =“EventID:$ EventID`nSource:$ Source`nMachineName:$ MachineName`nMessage:$ Message”
$ SMTPServer =“smtp.gmail.com”
$ SMTPClient = New-Object Net.Mail.SmtpClient($ SmtpServer,587)
$ SMTPClient.EnableSsl = $ true
$ SMTPClient.Credentials = New-Object System.Net.NetworkCredential
(“sios@medfordband.com”,“mySMTPP @ 55w0rd”);
$ SMTPClient.Send($ EmailFrom,$ EmailTo,$ Subject,$ Body)

从Powershell脚本生成的电子邮件示例如下所示。使用Windows Server 2016从Windows事件触发电子邮件警报 您可能已经注意到,此Powershell脚本使用Get-WinEvent cmdlet根据指定的LogName,Source和eventID获取最新的Event Log条目。然后它解析事件并将EventID,Source,MachineName和Message分配给将用于撰写电子邮件的变量。您将看到指定的LogName,Source和eventID与您在步骤2中设置计划任务时指定的ID相同。

第2步 – 设置计划任务

在任务计划程序中创建一个任务,如以下屏幕截图所示。

  1. 创建任使用Windows Server 2016从Windows事件触发电子邮件警报务确保将任务设置为“运行”,无论用户是否已登录。使用Windows Server 2016从Windows事件触发电子邮件警报
  2.  在“触发器”选项卡上,选择“新建”以创建将启动“在事件上”任务的触发器。在我的示例中,我将创建一个事件,触发任何时候DataKeeper(extmirr)将重要事件记录到系统日志。使用Windows Server 2016从Windows事件触发电子邮件警报 创建一个自定义事件和新事件过滤器,如下所示…对于我的触发器,使用Windows Server 2016从Windows事件触发电子邮件警报我触发通常受监控的SIOS DataKeeper(ExtMirr)EventIDs 16,20,23,150,219,220。您需要设置事件以触发要监视的特定事件。如果要通知来自不同日志或来源的事件,可以将多个触发器放在同一个任务中。
    使用Windows Server 2016从Windows事件触发电子邮件警报
    创建一个新的事件过滤器

     

  3. 配置事件触发器后,您将需要配置事件运行时发生的操作。在我们的例子中,我们将运行我们在步骤1中创建的Powershell脚本。使用Windows Server 2016从Windows事件触发电子邮件警报使用Windows Server 2016从Windows事件触发电子邮件警报
  4. 默认的Condition参数应该足够了。使用Windows Server 2016从Windows事件触发电子邮件警报
  5. 最后,在“设置”选项卡上,确保允许按需运行任务,并在任务已在运行时“排队新实例”。

    使用Windows Server 2016从Windows事件触发电子邮件警报

步骤3(如有必要) – 修复Microsoft Windows DistributedCOM事件ID:10016错误

理论上,如果您正确地执行了所有操作,您应该能够使用Windows Server 2016从Windows事件触发电子邮件警报。但是,我在我的一台服务器上遇到了一个奇怪的权限问题。这是我解决问题的方法。希望它也会对你有所帮助。在我手动触发事件的情况下,或者如果我直接运行Powershell脚本,一切都按预期工作,我会收到一封电子邮件。但是,如果正在监视的某个EventID被记录到事件日志中,则不会导致发送电子邮件。我唯一的线索是事件ID:10016。每次我希望任务触发器检测到记录的事件时,它都记录在我的系统事件日志中。

日志名称:系统
来源:Microsoft-Windows-DistributedCOM
日期:10/27/2018 5:59:47 PM
事件ID:10016
任务类别:无
等级:错误
关键词:经典
用户:DATAKEEPER  dave
电脑:sql1.datakeeper.local
描述:
特定于应用程序的权限设置不授予“本地激活”权限 
对于具有CLSID的COM Server应用程序 
{D63B10C5-BB46-4990-A94F-E40B9D520160}
和APPID 
{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}
给用户DATAKEEPER  dave SID(S-1-5-21-25339xxxxx-208xxx580-6xxx06984-500) 
来自地址LocalHost 
(使用LRPC)在应用程序容器中运行不可用SID(不可用)。
可以使用组件服务管理工具修改此安全权限。

许多针对该错误的Google搜索结果表明该错误是良性的。它包含有关如何抑制错误而不是修复错误的说明。但是,我很确定这个错误是我目前失败的原因。如果我没有正确解决问题,使用Windows Server 2016从Windows事件触发电子邮件警报将很困难。经过多次搜索,我偶然发现了这个新闻组的讨论。  Marc Whittlesey的回应使我指出了正确的方向。这是他写的……

在转到组件服务中的DCOM配置之前,您必须设置2个注册表项:CLSID密钥和APPID密钥。

我建议你按照一些步骤解决问题:

1。 按Windows + R键并键入regedit,然后按Enter键。2。 转到HKEY_Classes_Root CLSID * CLSID *。3。 右键单击它然后选择权限。4。 单击“高级”并将所有者更改为管理员。同时单击将显示在所有者行下方的框。5。 适用完全控制。6。 关闭选项卡,然后转到HKEY_LocalMachine Software Classes AppID * APPID *。7。 右键单击它然后选择权限。8。 单击“高级”并将所有者更改为管理员。9。 单击将显示在所有者行下方的框。10。 单击“应用”并向管理员授予完全控制权。11。 关闭所有选项卡,然后转到管理工具。12。 开放组件服务。13。 单击“计算机”,单击“我的电脑”,然后单击“DCOM”。14。 查找错误查看器上显示的相应服务。15。 右键单击它,然后单击属性。16。 单击安全选项卡,然后单击添加用户,添加系统,然后应用 17。 勾选激活本地框。因此,请在此处使用相关密钥,DCOM配置应该可以访问灰色区域:CLSID {D63B10C5-BB46-4990-A94F-E40B9D520160} APPID {9CA88EE3-ACB7-47C8-AFC4-AB702511C276}

我几乎可以逐字逐句地遵循步骤1-15。然而,当我到达第16步时,我真的无法确切地说出他希望我做什么。起初我将DATAKEEPER dave用户帐户完全控制权授予了RuntimeBroker,但这并没有解决问题。最后我只是在所有三个权限上选择了“使用默认值”并修复了问题。使用Windows Server 2016从Windows事件触发电子邮件警报 我不确定这是怎么发生的。我想我最好把它全部写下去,以防它再次发生,因为我花了一段时间来弄清楚它。

第4步 – 自动部署

如果需要在多个系统上启用相同的警报,请将任务导出到XML文件并将其导入其他系统。使用Windows Server 2016从Windows事件触发电子邮件警报使用Windows Server 2016从Windows事件触发电子邮件警报 或者甚至更好。 在文件共享上提供XML文件后,通过Powershell脚本自动执行导入作为构建过程的一部分,如以下示例所示。

PS C:> Register-ScheduledTask -Xml(get-content 
'\ myfileshare  tasks  DataKeeperAlerts.xml'|出弦) 
-TaskName“DataKeeperAlerts” - 用户数据管理员 dave 
-Password MyDomainP @ 55W0rd -Force

使用Windows Server 2016从Windows事件触发电子邮件警报

在我的下一篇文章中,我将向您展示如何在指定的服务启动或停止时收到通知。当然,您只需从Service Control Monitor监视EventID 7036即可。但是,只要任何服务开始或停止,这都会通知您。我们需要深入挖掘,以确保只有在我们关心的服务开始或停止时才会收到通知。如果您对我们的操作方法文章感兴趣,例如使用Windows Server 2016从Windows事件触发电子邮件警报,请单击此处。从Clusteringformeremortals.com转载

Copyright © 2025 · Enterprise Pro Theme on Genesis Framework · WordPress · Log in