Отображать сведения о событии в сообщении при прикреплении задачи к событию

Отображать сведения о событии в сообщении при прикреплении задачи к событию

Когда я пытаюсь безопасно извлечь оборудование, Windows 10 сообщает мне, что программа использует оборудование, но не сообщает, какая именно это программа. Я обнаружил, что эта информация записана в Event Viewer в разделе System как Event 225, как таковая:

Приложение \Device\HarddiskVolume3\Program Files... с идентификатором процесса 4424 остановило извлечение или извлечение устройства USB....

Это довольно полезная информация, которую я хотел бы видеть, не заходя каждый раз в Event Viewer. Я обнаружил, что в Event Viewer есть кнопка с надписью Attach Task To This Event... При нажатии она предлагает возможность отображать сообщение каждый раз, когда регистрируется это событие. Я хотел бы, чтобы задача отображала подробности события каждый раз, когда регистрируется событие 225. Кажется, это возможно, но я не эксперт на системном уровне.

Есть ли простой способ достичь моей цели? Если нет в отображаемом сообщении, есть ли способ написать скрипт пакетного файла, который будет выполняться вместо этого, чтобы сообщить мне эту информацию?

решение1

Действие "отобразить сообщение" устарело и может ничего не делать. Вместо этого вы можете использовать PowerShell! Сохраните это как .ps1файл где-нибудь на компьютере, например C:\evtmsg.ps1:

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

Этот скрипт получает последний экземпляр события 225 из системного журнала и использует библиотеку Windows Forms для отображения его сообщения.

Используйте Event ViewerПрикрепить задачу к этому событиюкоманда на экземпляре события 225. На экране действий выберите "запустить программу", затем укажите powershellпрограмму/скрипт для запуска. В поле "добавить аргументы" введите эту строку, скорректированную в зависимости от того, где вы сохранили скрипт PowerShell:

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

Изменение должно вступить в силу сразу после создания задачи.

решение2

Отправлять уведомление по электронной почте при создании определенного идентификатора события

У меня есть похожее решение, которым я хотел бы поделиться на всякий случай, если кто-то сможет его использовать, так как оно, похоже, помогает мне и кричит на меня только тогда, когда мне это явно нужно, исходя из конкретных причин.Идентификаторы событий.

Планирование

Это решение используетДиспетчер задачработа, которая имеет много разных ТриггерыпринадлежащийНа мероприятиикогда он должен быть выполнен. Вы указываете конкретныйИдентификатор событияэто к "курок«казнь.

введите описание изображения здесь введите описание изображения здесь


Скрипт PowerShell

ВотPowerShellскрипт, который использует учетную запись Gmail с паролем для отправки электронного письма, в тексте которого будет содержаться подробная информация о соответствующих событиях.

Примечание: Вам необходимо передать пароль учетной записи Gmail в качестве первого аргумента скрипту PowerShell.

$EmailPassword=$args[0]
$event = get-eventlog -LogName System -EntryType Error -newest 1

$PCName = $env:COMPUTERNAME
$Username = "LocalMailBox"
$EmailBody = $event | format-list -property * | out-string
$EmailFrom = "$PCName <[email protected]>"
$EmailTo = "[email protected]" 
$EmailSubject = "New Event Log [System]"
$SMTPServer = "smtp.gmail.com" 
Write-host "Sending Email"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword); 
$SMTPClient.Send($EmailFrom, $EmailTo, $EmailSubject, $EmailBody)
Start-Sleep -s 10

ИзДействиевкладку вы создадитеДействиеопределяется как:

  • Действие: Start a program
  • Программа/скрипт: Powershell
  • Добавьте аргументы (необязательно): -ExecutionPolicy Bypass -File "C:\Scripts\PSScript.ps1" "GmailPassword"
  • Начало (необязательно): C:\Windows\System32\WindowsPowerShell\v1.0 введите описание изображения здесь

ИзОбщийвкладку запланированного задания, убедитесь, чтоЗапускать независимо от того, вошел ли пользователь в систему или нет.иЗапустить с наивысшими привилегиямивыбраны оба варианта.

введите описание изображения здесь


Электронная почта

Если все вышеперечисленное настроено так, как указано, это гарантирует, что когда эти конкретныеИдентификаторы системных событийгенерируются те, которые вы определили "триггеры«для этого будет отправлено электронное письмо, и, как мы надеемся, с соответствующими подробностями относительно события, которое инициирует каждое из них.

Я упоминаю об этом только потому, что заметил, что если два события совпадают PowerShellлогика $event | format-list -property * | out-stringсоздается быстро, так что текст письма будет содержать подробности последнего события, основанные на времени.

Помните, что независимо отИдентификатор событияСодержимое основного текста, даже если оно не имеет отношения к конкретным событиям, которые вы определили как триггеры, несомненно, что указанные триггеры действительно спровоцировали это электронное письмо, поэтому уделите ему внимание при получении.

введите описание изображения здесь

Связанный контент