Ereignisdetails in einer Nachricht anzeigen, wenn eine Aufgabe an ein Ereignis angehängt wird

531
Yaroslav

Wenn ich versuche, Hardware sicher zu entfernen, teilt Windows 10 mir mit, dass ein Programm die Hardware verwendet, mir aber nicht sagt, um welches Programm es sich handelt. Ich habe festgestellt, dass diese Informationen jedoch in der Ereignisanzeige unter System als Ereignis 225 als solche aufgezeichnet werden:

Die Anwendung \ Device \ HarddiskVolume3 \ Program Files ... mit der Prozess-ID 4424 hat das Entfernen oder Auswerfen des USB-Geräts gestoppt.

Dies sind ziemlich hilfreiche Informationen, die ich gerne sehen würde, ohne jedes Mal zum Ereignis-Viewer zu gehen. Ich habe festgestellt, dass sich in der Ereignisanzeige eine Schaltfläche befindet, die den Befehl Aufgabe an dieses Ereignis anfügen angibt. Wenn diese Option gedrückt wird, bietet sie die Möglichkeit, jedes Mal eine Meldung anzuzeigen, wenn dieses Ereignis protokolliert wird. Ich möchte, dass die Task die Ereignisdetails jedes Mal anzeigt, wenn das Ereignis 225 protokolliert wird. Es scheint, als könnte es möglich sein, aber ich bin kein Experte auf Systemebene.

Gibt es eine einfache Möglichkeit, mein Ziel zu erreichen? Wenn nicht in der Display-Nachricht eine Batchdatei zum Ausführen eines Skripts ausgeführt werden kann, anstatt mir diese Informationen mitzuteilen?

2

2 Antworten auf die Frage

1
Ben N

Die Aktion "Nachricht anzeigen" ist veraltet und führt möglicherweise nichts aus. Stattdessen können Sie PowerShell verwenden! Speichern Sie dies als .ps1Datei irgendwo auf dem Computer, zB 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') 

Dieses Skript ruft die letzte Instanz von Ereignis 225 aus dem Systemprotokoll ab und verwendet die Windows Forms-Bibliothek zum Anzeigen der Nachricht.

Verwenden Sie den Befehl zum Anhängen von Aufgaben des Ereignis - Viewers an dieses Ereignis für eine Instanz des Ereignisses 225. Wählen Sie im Bildschirm "Aktion" die Option "Programm starten", und geben Sie an, powershelldass das Programm / Skript ausgeführt werden soll. Fügen Sie im Feld "Argumente hinzufügen" diese Zeile ein, die für den Speicherort des PowerShell-Skripts angepasst wurde:

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

Die Änderung sollte sofort nach dem Erstellen der Aufgabe wirksam werden.

0
Pimp Juice IT

E-Mail-Benachrichtigung senden, wenn eine bestimmte Ereignis-ID generiert wird

Ich habe eine ähnliche Lösung, die ich weitergeben wollte, nur für den Fall, dass jemand sie einsetzen kann, da sie mir scheinbar helfen und mich nur anschreien soll, wenn ich es explizit auf der Grundlage bestimmter Ereignis-IDs benötige .

Terminplanung

Diese Lösung verwendet einen Taskplaner- Job mit vielen verschiedenen Triggern des Ereignisses On a, wenn es ausgeführt werden soll. Sie geben die spezifische Ereignis-ID an, die eine Ausführung " auslösen " soll.


PowerShell-Skript

Hier ist ein PowerShell- Skript, das ein Google Mail-Konto mit einem Kennwort zum Senden einer E-Mail verwendet, die die Details der zutreffenden Ereignisse in seinem Hauptteil enthält.

Hinweis: Sie müssen das Kennwort des Google Mail-Kontos als erstes Argument an das PowerShell-Skript übergeben.

$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 

Auf der Registerkarte " Aktion" erstellen Sie eine Aktion, die wie folgt definiert ist:

  • Aktion: Start a program
  • Programm / Skript: Powershell
  • Argumente hinzufügen (optional): -ExecutionPolicy Bypass -File "C:\Scripts\PSScript.ps1" "GmailPassword"
  • Beginnen Sie in (optional): C:\Windows\System32\WindowsPowerShell\v1.0

Von dem Allgemein Registerkarte der geplanten Aufgabe, sicherzustellen, dass der Run ob Benutzer angemeldet sind oder nicht und der Run mit höchsten Privilegien Optionen aktiviert ist.


Die Email

Wenn alle oben aufgeführten Einstellungen wie angegeben festgelegt sind, wird sichergestellt, dass bei der Generierung bestimmter Systemereignis-IDs, für die Sie eine E-Mail senden, " ausgelöst " wird, und eine E-Mail gesendet wird, die hoffentlich mit den zutreffenden Details für das jeweils auslösende Ereignis versehen ist.

Ich erwähne dies nur, da ich bemerkt habe, dass, wenn zwei Ereignisse, die der PowerShell- Logik $event | format-list -property * | out-stringentsprechen, schnell erstellt werden, der Hauptteil der E-Mail die Details des neuesten Ereignisses enthält, die auf dem Zeitablauf basieren.

Denken Sie daran, dass der Inhalt der Ereignis-ID unabhängig von den Ereignissen, die Sie als Auslöser definiert haben, auch wenn er nicht relevant ist, dass die definierten Auslöser diese E-Mail tatsächlich ausgelöst haben.

Danke für die Antwort. Ich war zwar nicht ganz auf der Suche nach einer E-Mail (da dies eher für meinen PC als für einen Remote-Server gedacht ist), habe aber aus Ihrer Antwort einiges gelernt. Vor allem, dass es eine andere Seite zu den Fenstern gibt, die es mir erlaubt, es ziemlich individuell anzupassen! Ich denke, ich werde in der nächsten Zeit ein bisschen Spaß haben, wenn ich das erforsche. Yaroslav vor 6 Jahren 0