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

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

Wenn ich versuche, Hardware sicher zu entfernen, teilt mir Windows 10 mit, dass ein Programm die Hardware verwendet, sagt mir aber nicht, welches Programm es ist. Ich habe festgestellt, dass diese Information jedoch in der Ereignisanzeige unter System als Ereignis 225 wie folgt aufgezeichnet wird:

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

Das sind ziemlich hilfreiche Informationen, die ich gerne sehen würde, ohne jedes Mal zur Ereignisanzeige zu gehen. Ich habe festgestellt, dass es in der Ereignisanzeige eine Schaltfläche mit der Aufschrift „Aufgabe an dieses Ereignis anhängen …“ gibt. Wenn diese Schaltfläche gedrückt wird, bietet sie die Option, bei jeder Protokollierung dieses Ereignisses eine Meldung anzuzeigen. Ich möchte, dass die Aufgabe die Ereignisdetails jedes Mal anzeigt, wenn das Ereignis 225 protokolliert wird. Es scheint, als wäre das möglich, aber ich bin kein Experte auf Systemebene.

Gibt es eine einfache Möglichkeit, mein Ziel zu erreichen? Wenn die Meldung nicht angezeigt wird, gibt es dann eine Möglichkeit, stattdessen ein Batch-Dateiskript zu erstellen, das diese Informationen ausgibt?

Antwort1

Die Aktion „Nachricht anzeigen“ ist veraltet und bewirkt möglicherweise nichts. Stattdessen können Sie PowerShell verwenden! Speichern Sie dies als .ps1Datei irgendwo auf dem Computer, z. B 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 aktuellste Instanz des Ereignisses 225 aus dem Systemprotokoll ab und verwendet die Windows Forms-Bibliothek, um die Meldung anzuzeigen.

Verwenden Sie die EreignisanzeigeAufgabe diesem Ereignis anhängenBefehl für eine Instanz von Ereignis 225. Wählen Sie auf dem Aktionsbildschirm „Programm starten“ und geben Sie dann an, powershellwelches Programm/Skript ausgeführt werden soll. Geben Sie im Feld „Argumente hinzufügen“ diese Zeile ein, angepasst an den Speicherort, an dem Sie das PowerShell-Skript gespeichert haben:

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

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

Antwort2

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

Ich habe eine ähnliche Lösung, die ich teilen wollte, nur für den Fall, dass jemand sie verwenden kann, da sie mir zu helfen scheint und mich nur dann anschreit, wenn ich sie explizit brauche, basierend auf bestimmtenEreignis-IDs.

Terminplanung

Diese Lösung verwendet eineAufgabenplanungJob mit vielen verschiedenen Löst ausdesAuf einer Veranstaltungfür den Zeitpunkt der Ausführung. Sie geben die spezifischeEreignis-IDdas ist zu "auslösen" eine Hinrichtung.

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben


PowerShell-Skript

Hier ist einPower ShellSkript, das ein Gmail-Konto mit einem Passwort verwendet, um eine E-Mail zu senden, deren Text die Einzelheiten der entsprechenden Ereignisse enthält.

Notiz: Sie müssen das Kennwort des Gmail-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 <[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

Von demAktionerstellen Sie einAktiondefiniert als:

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

Von demAllgemeinder geplanten Aufgabe, stellen Sie sicher, dass dieWird ausgeführt, unabhängig davon, ob der Benutzer angemeldet ist oder nichtund dasMit höchsten Berechtigungen ausführenBeide Optionen sind ausgewählt.

Bildbeschreibung hier eingeben


Die Email

Wenn alle oben aufgeführten Einstellungen wie angegeben vorgenommen werden, ist sichergestellt, dass bei bestimmtenSystemereignis-IDswerden generiert, die Sie definiert haben "löst aus" Dazu wird eine E-Mail gesendet, hoffentlich mit entsprechenden Einzelheiten zu dem jeweiligen auslösenden Ereignis.

Ich erwähne dies nur, weil mir aufgefallen ist, dass wenn zwei Ereignisse übereinstimmen, Power ShellDie Logik $event | format-list -property * | out-stringwird schnell erstellt, sodass der Textkörper der E-Mail die zeitlich aktuellen Details des Ereignisses enthält.

Denken Sie daran, dass unabhängig von derEreignis-IDTextinhalt, und selbst wenn er nicht für die spezifischen Ereignisse relevant ist, die Sie als Auslöser definiert haben, ist es sicher, dass die definierten Auslöser diese E-Mail tatsächlich ausgelöst haben. Schenken Sie ihr also beim Empfang etwas Aufmerksamkeit.

Bildbeschreibung hier eingeben

verwandte Informationen