2

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

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

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

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

2 ответа2

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 для отображения своего сообщения.

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

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

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

0

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

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

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

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


Скрипт 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 <noreply@domain.notify>"
$EmailTo = "whatever@gmail.com" 
$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 создаются быстро, что тело письма будет содержать информацию о последнем событии в зависимости от времени.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .