Почему планировщик заданий запускается при регистрации одного события, а не другого?
Я пытаюсь отследить возникновение указанных событий безопасности. Для этого я хочу, чтобы сообщение отображалось всякий раз, когда эти события регистрируются в журнале безопасности 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')
Событие с кодом 1102 происходит всякий раз, когда очищается журнал аудита. Чтобы вызвать это, я просто захожу в Event Viewer, щелкаю правой кнопкой мыши по журналу безопасности и нажимаю "Очистить журнал...". Вскоре после этого сообщение отображается как задумано.
Однако, когда я пытаюсь вызвать событие с кодом 4719 путем изменения политики аудита системы, сообщение не отображается, несмотря на то, что событие регистрируется в журнале безопасности. Оба триггера установлены в планировщике заданий одинаково, поэтому мне неясно, почему это работает для одного, а не для другого.
2 ответа
Наконец выяснил это... оказывается, что источником для 4719 является Microsoft-Windows-Security-Auditing, а не Microsoft-Windows-Eventlog.
Не нам 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.codeproject.com/Articles/4857/%2FArticles%2F4857%2FA-realtime-event-log-monitoring-tool