Как отобразить сообщение, когда происходит событие системного аудита? - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно отображать сообщение пользователю всякий раз, когда происходят следующие идентификаторы событий системы аудита: 1100 , 1102 , 1104 , 1108 , 4612 и 4719 .

В строке заголовка окна сообщения в качестве примера следует указать «Идентификатор события: 1100»

Мне также нужно знать, как запускать каждое из этих событий.

Вот что мне удалось сделать до сих пор: в настоящее время я использую планировщик заданий Windows.Для события с кодом 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')

Зайдя в Event Viewer и очистив журнал безопасности, я могу отобразить нужное сообщение.Однако я хотел бы иметь возможность добавить аргумент String в конец моего действия планировщика заданий, а не вводить строковый литерал 'Event ID: 1102' в моем скрипте .ps1.Это позволит мне использовать тот же сценарий для любого идентификатора события.

Кроме того, я не смог отобразить сообщение для любого другого события (используя тот же триггер / действие / сценарий, как описано выше).но с соответствующими идентификаторами событий).Например, я произвел изменение политики аудита системы (событие с кодом 4719), которое было зарегистрировано в журнале безопасности в средстве просмотра событий, но по какой-то причине не отображало никаких сообщений.Что касается остальных, я еще не выяснил, как их запускать вручную.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Я наконец-то понял, как это сделать ...

Мой триггер из 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)

Это отобразит сообщение с описанием события с идентификатором события в строке заголовка.

0 голосов
/ 18 декабря 2018

Вы можете передать свойства любого события в основанную на событии задачу.Вам нужно будет экспортировать вашу задачу, а затем изменить экспортированный xml, добавив необходимые параметры в раздел EventTrigger:

<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/

Кстати, вам не нужно создавать сценарий для отображения сообщения, потому что планировщик задач может сделать это сам по себе, просто выберите задачудействие "Показать сообщение".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...