【问题标题】:How to display message when system audit event occurs?发生系统审计事件时如何显示消息?
【发布时间】:2019-05-18 05:23:21
【问题描述】:

每当发生以下审计系统事件 ID 时,我需要向用户显示一条消息:110011021104110846124719

消息窗口的标题栏应该说,例如,“事件 ID:1100”

我还需要知道如何触发这些事件。

到目前为止,我已经完成了以下工作:我目前正在使用 Windows 任务计划程序。对于事件 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')

通过进入事件查看器并清除安全日志,我可以显示所需的消息。但是,我希望能够在我的任务计划程序操作的末尾添加一个字符串参数,而不是在我的 .ps1 脚本中输入字符串文字“事件 ID:1102”。这将允许我对任何事件 ID 使用相同的脚本。

除此之外,我无法让消息针对任何其他事件显示(使用与上面详述的相同的触发器/操作/脚本,但具有适当的事件 ID)。例如,我进行了系统审核策略更改(事件 ID 4719),该更改已记录到​​事件查看器的安全日志中,但由于某种原因没有显示任何消息。至于其他的,我还没想好怎么手动触发。

【问题讨论】:

  • 为什么不像Add-Type -AssemblyName System.Windows.Forms $lastEvt = Get-WinEvent -LogName 'Security' | select -First 1 Write-Host "Event ID: " $lastEvt.Id
  • @Rthomas529 不起作用,当我按照您的建议修改脚本时,我根本没有收到任何消息。
  • @TeddyF 您是否尝试过“以最高权限运行”选项。
  • @LT- 与哪个解决方案结合使用?
  • @TeddyF 关于这个推荐“最重要的是,我无法让消息出现在任何其他事件中(使用与上面详述的相同的触发器/动作/脚本,但使用适当的事件 ID)。”但不管任何评论。为了处理安全事件,您应该始终以最高权限运行计划任务。

标签: windows bash powershell


【解决方案1】:

您可以将任何事件的属性传递给基于事件的任务。您需要导出任务,然后通过将所需参数添加到 EventTrigger 部分来修改导出的 xml:

<EventTrigger>
    <ValueQueries>
        <Value name="EventID">Event/System/EventID</Value>
    </ValueQueries>    
    ...
</EventTrigger>

然后导入您的任务,现在您可以将此新值作为命令行参数$(&lt;value_name&gt;) 引用。 例如。 cmd /k echo $(EventID)

你可以在这里https://blogs.technet.microsoft.com/otto/2007/11/09/reference-the-event-that-triggered-your-task/阅读更多信息

顺便说一句,您不需要创建脚本来显示消息,因为任务计划程序可以自己执行此操作,只需选择任务操作“显示消息”。

【讨论】:

  • 当我将 OP 中 .ps1 脚本中的 'Event ID: 1102' 替换为 $(EventID) 时,“错误”会打印到消息窗口标题栏(即使在导出 XML、修改它,然后导入它回来了)。此外,我无法选择“显示消息”作为操作,因为这是一个已弃用的功能。
  • $(EventID) 应作为参数传递给任务参数中的脚本。
  • 我将“事件 ID:1102”作为参数传递,如下所示:-executionpolicy bypass -windowstyle hidden -file C:\1102.ps1 "Event ID: 1102",但标题栏中仍然显示“错误”。
  • 您应该按字面意思传递 $(EventID)。并修改您的脚本以使用该参数。
  • 现在我将-executionpolicy bypass -windowstyle hidden -file C:\1102.ps1 "$(EventID)" 传递给我修改过的脚本:[System.Windows.Forms.MessageBox]::Show(($lastEvt.Message), $(EventID)),但标题栏中仍然出现“错误”。
【解决方案2】:

我终于想通了……

我的 OP 触发器保持不变,但 Action 应该修改如下:

-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 的事件描述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2015-11-05
    相关资源
    最近更新 更多