为什么任务计划程序通过记录一个事件来触发,而不是另一个事件的记录来触发?

为什么任务计划程序通过记录一个事件来触发,而不是另一个事件的记录来触发?

我正在尝试跟踪指定安全事件的发生。为了实现这一点,我希望每当这些事件记录在 Windows 安全日志中时都显示一条消息。由于显示消息是任务计划程序中已弃用的功能,因此我使用 Powershell 命令来实现这一点,如下所示:

扳机

On event - Log: Security, Source: Microsoft-Windows-Eventlog, EventID: 1102 

行动

-executionpolicy bypass -windowstyle hidden -file C:\1102.ps1

1102.ps1

Add-Type -AssemblyName System.Windows.Forms
$lastEvt = Get-WinEvent -LogName 'Security' -MaxEvents 20 | ? { $_.Id -eq 1102 } | select -First 1
[System.Windows.Forms.MessageBox]::Show(($lastEvt.Message), 'Event ID: 1102')

事件 ID1102每当清除审计日志时都会发生这种情况。要触发此操作,我只需进入事件查看器,右键单击安全日志,然后单击“清除日志...”。不久之后,一条消息就会按预期显示。

但是,当我尝试触发事件 ID4719通过更改系统审核策略,尽管事件已记录在安全日志中,但没有显示任何消息。两个触发器在任务计划程序中的设置类似,所以我不明白为什么这对一个有效而对另一个无效。

答案1

不要为此使用 TaskSceduler。使用永久的 WmiEvent 消费者/观察者。使用 RegEx 或追踪多个事件。

例子:

Add-Type -AssemblyName System.Windows.Forms
$lastEvt = Get-WinEvent -LogName 'Security' -MaxEvents 20 | ? { $_.Id -eq '1102|4719' } | select -First 1
[System.Windows.Forms.MessageBox]::Show(($lastEvt.Message), "Event ID: $($_.Id)")

这对于多种语言来说都是可能的,所以不是 PS 特有的,但当然 PS 也可以用于它。

例子:

Powershell 集中日志监控器监控服务器集合中的指定日志事件,并在遇到监控事件时发送电子邮件警报。 https://gallery.technet.microsoft.com/scriptcenter/ed188912-1a20-4be9-ae4f-8ac46cf2aae4

https://learn-powershell.net/2013/08/02/powershell-and-events-wmi-temporary-event-subscriptions

http://irl33t.com/blog/2011/06/powershell-script-watch-eventlogs-ps1

https://www.codeguru.com/vb/vbnet30/article.php/c13315/How-to-Build-a-Simple-Event-Log-MontiorWatcher-Using-TCP-in-NET.htm

https://www.codeproject.com/Articles/4857/%2fArticles%2f4857%2fA-realtime-event-log-monitoring-tool

https://www.ravichaganti.com/blog/attaching-scripts-or-tasks-to-windows-event-log-entries-using-powershell-and-wmi

答案2

终于搞清楚了……原来 4719 的来源是Microsoft-Windows-安全-审计并不是微软Windows事件日志

相关内容