无论何时出现以下审核系统事件ID,我都需要向用户显示一条消息:1100,1102,1104,1108,4612 ,和4719。
例如,消息窗口的标题栏应显示“事件ID:1100”
我还需要知道如何触发这些事件。
这是到目前为止我已经完成的工作:我当前正在使用Windows Task Scheduler。对于事件ID 1102,我设置了以下触发器:
On event - Log: Security, Source: Microsoft-Windows-Eventlog, EventID: 1102
随后将在powershell中运行以下操作:
-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')
通过进入事件查看器并清除安全日志,我可以使所需的消息出现。但是,我希望能够在我的Task Scheduler操作的末尾添加一个String参数,而不是在.ps1脚本中键入字符串文字“ Event ID:1102”。这将使我可以对任何事件ID使用相同的脚本。
最重要的是,我无法使该消息出现在任何其他事件中(使用与上述相同的触发器/操作/脚本,但带有适当的事件ID)。例如,我进行了系统审核策略更改(事件ID 4719),该更改已记录到事件查看器中的安全日志中,但由于某种原因未显示任何消息。至于其他,我还没有弄清楚如何手动触发它们。
答案 0 :(得分:0)
您可以将任何事件的属性传递给基于事件的任务。您需要导出任务,然后通过向EventTrigger部分添加所需的参数来修改导出的xml:
<EventTrigger>
<ValueQueries>
<Value name="EventID">Event/System/EventID</Value>
</ValueQueries>
...
</EventTrigger>
然后导入您的任务,现在您可以将此新值作为命令行参数$(<value_name>)
引用。
例如cmd /k echo $(EventID)
您可以在这里https://blogs.technet.microsoft.com/otto/2007/11/09/reference-the-event-that-triggered-your-task/
了解更多信息顺便说一句,您不需要创建脚本来显示消息,因为Task Scheduler可以自己执行此操作,只需选择任务操作“显示消息”即可。
答案 1 :(得分:0)
我终于弄清楚了该怎么做...
我从OP触发的触发器保持不变,但应按以下方式修改操作:
-executionpolicy bypass -windowstyle hidden -file C:\1102.ps1 -eventID 1102
现在脚本本身将如下所示:
param([Int32]$eventID)
Add-Type -AssemblyName System.Windows.Forms
$lastEvt = Get-EventLog -Log Security -Newest 1000 | where { $_.EventID -eq $eventID } | Select -First 1
[System.Windows.Forms.MessageBox]::Show(($lastEvt.Message), 'Event ID: ' + $eventID)
这将在标题栏中显示一条消息,其中包含事件说明和事件ID。