crazyhoesl
Goto Top

Eventlog Mailer

Hallo miteinander,

da mir in diesem Forum immer so wunderbar geholfen wird, dachte ich mir ich leiste auch Mal einen kleinen Beitrag. Und ich weiß das ich nicht der perfekte Batch-Coder bin, und "schöner Code" ist entspricht sicher nicht dem was ich hier anbiete, aber es funktioniert:

Windows hat ein nettes Tool an Board, was meiner Erfahrung nach gänzlich unbeachtet sein Dasein im System32 Ordner fristet: Eventtriggers.exe
Es scannt das Ereignisprotokoll auf vorgegebene Ereignisse und führt dann einen angegeben Befehl aus. Das sieht dann ca. so aus:

eventtriggers.exe /create /tr "Name des Triggers" /l "Ereignisart" /t "Ereignistyp" /so "Quelle" /eid "Ereignis-ID" /tk "BEFEHL"  

Also ein ziemlicher Rattensch-w-a-n-z. Benutzt man Eventtriggers täglich benötigt man meine Batch sicher nicht, aber für Admins die das ab und zu nutzen möchten ist es wohl recht hilfreich.

Um den BEFEHL so hinzubekommen, das mir eine E-Mail geschickt wird, bediene ich mich des kleinen Programmes BMail (17K). Bmail.exe herunterladen und in irgendein Verzeichnis speichern, am einfachsten "EventMailer" erstellen. Mehr über BMail gibt es übrigens hier: Seitenlink.

Nun folgenden Code kopieren und in eine .bat Datei im gleichen Verzeichnis wie die bmail.exe speichern, als z.B. EventMailer.bat nennen.

@echo off & setlocal EnableDelayedExpansion
cls
color 4F && title


set verHV=1.0




:MENU
echo.
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo								EventMail %verHV%
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo.
echo 	Was soll bei Auftreten des Eventlog-Eintrags geschehen?
echo.
echo.
echo.
echo.
echo 		(1) Eine E-Mail soll verschickt werden.
echo.
echo.
echo 		(2) Ein Batch/Befehl soll ausgefuehrt werden.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
set /p eingabe="Ihre Eingabe und [ENTER]: "  
ping localhost -n 1 > NUL





:Eventde
cls
echo.
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo								EventMail %verHV%
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo.
set /p hvtr="Name des Triggers: "  
echo.
set /p hvl="Ereignisart (1)Anwendung, (2)System, (3)Sicherheit: "  
echo.
echo 		#################### W I C H T I G ##################
echo 		#        Folgende drei Angaben sind optional.       #
echo 		#       Mindestens EINE muss angegeben werden.      #
echo 		# Je mehr Sie eingeben, um so genauer das Ergebnis. #
echo 		#####################################################
echo.
set /p hvt="Ereignistyp (1)Fehler, (2)Information, (3)Warnung: "  
echo.
set /p hvso="Quelle (WinMgmt): "  
echo.
set /p hveid="Ereignis-ID (5603): "  
echo.

if "%hvl%" equ "1" set hvlx=APPLICATION  
if "%hvl%" equ "2" set hvlx=SYSTEM  
if "%hvl%" equ "3" set hvlx=SECURITY  

if "%hvt%" equ "1" set hvtx=ERROR  
if "%hvt%" equ "2" set hvtx=INFORMATION  
if "%hvt%" equ "3" set hvtx=WARNING  





ping localhost -n 1 >NUL
cls
echo.
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo								EventMail %verHV%
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo.
echo 			Name: %hvtr%
echo.
echo 			Ausloesername: %hvlx%
echo.
echo 			Ereignistyp: %hvtx%
echo.
echo 			Quelle: %hvso%
echo.
echo 			Ereignis-ID: %hveid%
echo.
echo.
echo.
echo.
echo.
echo.
echo.
set /p Auswahl="Zur Korrektur bitte 3 eingeben, ansonsten mit ENTER weiter: "  

if "%Auswahl%" equ "3" goto Eventde  
if not "%Auswahl%" equ "3" goto Kreuzung  

:Kreuzung
if "%eingabe%" equ "1" goto Email  
if "%eingabe%" equ "2" goto Befehl  





:Email
cls
echo.
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo								EventMail %verHV%
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo.
echo.
set /p hvsmtp="SMTP-Server Name: "  
echo.
set /p hvrcpt="Ziel-Adresse: "  
echo.
set /p hvfrom="Absender-Adresse: "  
echo.
set /p hvsubj="Betreff: "  
echo.
set /p hvdata="Inhalt: "  

copy /Y bmail.exe %windir%system32>NUL

ping localhost -n 2 >NUL




cls
echo.
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo								EventMail %verHV%
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo.
echo 			SMTP-Server: %hvsmtp%
echo.
echo 			Ziel-Adresse: %hvrcpt%
echo.
echo 			Absender: %hvfrom%
echo.
echo 			Betreff: %hvsubj%
echo.
echo 			Inhalt: %hvdata%
echo.
echo.
echo.
echo.
echo.
echo.
echo.
set /p Auswahl="Zur Korrektur bitte 3 eingeben, ansonsten mit ENTER weiter: "  


if "%Auswahl%" equ "3" goto Email  
if not "%Auswahl%" equ "3" goto Mailer  




:Mailer
set hvsubj="%hvsubj%"  
set hvdata="%hvdata%"  
echo %windir%system32%mail.exe -s %hvsmtp% -t %hvrcpt% -f %hvfrom% -a %hvsubj% -b %hvdata%>mail.cmd
set Befehl=%windir%system32mail.cmd
copy /Y mail.cmd %windir%system32>NUL
del mail.cmd
if "%eingabe%" equ "3" goto Email  

GOTO DOIT






:Befehl

cls
echo.
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo								EventMail %verHV%
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo.
echo 			(1) Befehl oder (2) Batch?
echo.
set /p Auswahlq="Auswahl: "  
if "%Auswahlq%" equ "1" goto Befehla  
if "%Auswahlq%" equ "2" goto Befehlb  



:Befehla
echo.
echo.
set /p Befehl="Geben Sie den Befehl ein: "  
goto DOIT





:Befehlb
set Befehl=%windir%system32em.BAT
echo.
echo.
echo Erstellen Sie eine Batch Datei, und speichern Sie diese im System32-Ordner im Windows-Verzeichnis ab. Der Dateiname muss em.bat heissen!
notepad
echo.
echo.
echo Wenn dies erledigt ist mit beliebiger Taste fortfahren.

Pause>NUL

:DOIT
cls
echo.
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo								EventMail %verHV%
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo.
echo 			Daten werden verarbeitet...
echo.
echo.

ping localhost>NUL

set Befehl="%Befehl%"  





if "%hvtx%" equ "" set troq=1  
if "%hvso%" equ "" set trow=2  
if "%hveid%" equ "" set troe=3  

set grr=%troq%%trow%%troe%

if "%grr%" equ "1" goto nohvtx  
if "%grr%" equ "2" goto nohvso  
if "%grr%" equ "3" goto nohveid  
if "%grr%" equ "12" goto nohvtxhvso  
if "%grr%" equ "13" goto nohvtxhveid  
if "%grr%" equ "23" goto nohvsohveid  





:nohvtx
set hvso="%hvso%"  
set hvtr="%hvtr%"  
eventtriggers.exe /create /tr %hvtr% /l %hvlx% /so %hvso% /eid %hveid% /tk %Befehl%
goto endw


:nohveid
set hvso="%hvso%"  
set hvtr="%hvtr%"  
eventtriggers.exe /create /tr %hvtr% /l %hvlx% /t %hvtx% /so %hvso% /tk %Befehl%
goto endw


:nohvso
set hvtr="%hvtr%"  
eventtriggers.exe /create /tr %hvtr% /l %hvlx% /t %hvtx% /eid %hveid% /tk %Befehl%
goto endw


:nohvtxhvso
set hvtr="%hvtr%"  
eventtriggers.exe /create /tr %hvtr% /l %hvlx% /eid %hveid% /tk %Befehl%
goto endw


:nohvtxhveid
set hvtr="%hvtr%"  
set hvso="%hvso%"  
eventtriggers.exe /create /tr %hvtr% /l %hvlx% /so %hvso% /tk %Befehl%
goto endw


:nohvsohveid
set hvtr="%hvtr%"  
eventtriggers.exe /create /tr %hvtr% /l %hvlx% /t %hvtx% /tk %Befehl%
goto endw






:endw
echo.
echo.
echo.
echo Mit Tastendruck Programm beenden
pause>NUL
set hvtr=

set hvl=
set Auswahlq=
set Befehl=
set hvdata=
set hvsubj=
set hvfrom=
set hvrcpt=
set hvsmtp=
set hvt=
set hvlx=
set hvtx=
set hvso=
set hveid=
set eingabe=
set Auswahl=
set verHV=

Zu Anfang kommt eine Abfrage ob eine E-Mail oder ein Befehl/Batch gestartet werden soll, wenn ein Ereignis auftritt. Wählt man Befehl/Batch, und dann Batch, öffnet sich automatisch notepad, und dort kann man seinen eigenen Code eingeben. Dieser muss dann noch unter %windir%system32em.bat gespeichert werden, und bei schliessen des Notepad-Fensters läuft die Batch weiter.

Natürlich kann man auch schon vorher sich eine em.bat speichern und notepad einfach schliessen.

Ein Beispiel zum Verständnis und auch gut zum Testen:
Startet man den Windows Live Messenger wird ein Eintrag in das Ereignisprotokoll geschrieben:

unter Anwendung im Ereignisprotokoll erscheint dann:
Information | Datum | Uhrzeit | Quelle (ESENT) | Kategorie | Ereignis (102)

Also wir wollen das wenn der Messenger gestartet wird eine E-Mail versendet wird. Man startet die Batch und auf die erste Frage:

Was soll bei Auftreten des Eventlog-Eintrags geschehen? Antworten wir mit (1) Eine E-Mail soll verschickt werden.

Nun werden die verschiedenen Variablen abgefragt:
Name des Triggers: Kann frei gewählt werden
Ereignisart: in unserem Beispiel (1) Anwendung
Ereignistyp: Information
Quelle: wie oben beschrieben: ESENT
EreignisID: 102

Dann wird nochmal alles zusammengefasst angezeigt. Ist alles korrekt gehts mit Enter weiter:

Nun werden die Variablen für den E-Mail Versand abgefragt. Diese Angaben müsst Ihr selbst wissen face-wink

Auch diese Angaben werden nochmal zusammengefasst. Nach dem Ihr auf ENTER gedrückt habt wird der Eventtrigger erstellt.
Startet ihr nun den Live Messenger bekommt Ihr eine E-Mail zugesandt wenn alles richtig gemacht wurde!


Um euer Eventtrigger wieder zu deaktivieren gebt in der Kommandozeile einfach ein:
eventtriggers /delete /tid *
Damit werden alle Trigger gelöscht. Die Dateien bmail.exe und mail.cmd müsst ihr selbst noch aus dem System32 Ordner löschen.

Vielleicht kann das dem ein oder anderem von Euch ein bisschen das Leben erleichtern.

Ich freue mich jetzt schon auf eure Rückmeldungen, und ja ich weiß: ich bin nicht der tollste Batcher...


In diesem Sinne,

euer Crazyhoesl

Content-ID: 66184

Url: https://administrator.de/contentid/66184

Ausgedruckt am: 08.11.2024 um 21:11 Uhr

Biber
Biber 14.08.2007 um 17:00:19 Uhr
Goto Top
Moin crazyhoesl,

erstmal vielen Dank für Dein Beispiel.
Da Du auch um konstruktive Kritik ersucht hast, gleich die Sachen, die mir so beim ersten Überfliegen aufgefallen sind.

Mögliche Verschlankungen:
1) Da Du ja die Variablen richtigerweise mit "setlocal" als "die Privat-Variablen genau dieses Batches" deklariert hast, kannst Du Dir unten am Ende das "Set Var=" schenken. Einfach löschen.

2) Du hast relativ häufig "gleichen" Code. Schreib den einmal, ruf ihn mehrfach auf. Macht es wartbarer.
....
:ShowDisplayHeader
cls
echo.
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo								EventMail %verHV%
echo 						~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
echo.
echo 
goto :eof
...
Diesen Block kannst Du irgendwo im Code plazieren (oder "platzieren" nach der reformierten Rechtschreibreformreform) und mit "call :ShowDisplayHeader" aufrufen.
Macht es etwas übersichtlicher.

3) Vermeide, wegen der systemimmanenten Dussligkeit eines CMD-Interpreters so etwas:
if not "%Auswahl%" equ "3" goto Kreuzung  

:Kreuzung
if "%eingabe%" equ "1" goto Email  
if "%eingabe%" equ "2" goto Befehl  


:Email

Besser:
..
if "%Auswahl%" equ "3" goto :nichtzurKreuzung  
REM ---> er geht ohnehin weiter zur Kreuzung..
:Kreuzung
if "%eingabe%" equ "2" goto Befehl  
REM if "%eingabe%" equ "1" goto Email -->macht er ohnehin  


:Email
Begründung: Bei jedem "Goto"-Befehl sucht die CMD.exe wieder von oben, vom Beginn des Batches an diese Sprungmarke.
D.h. der Befehl oben "goto Kreuzung" hält ihn eigentlich nur auf.. *gg

Grüße
Biber
Dani
Dani 31.10.2007 um 21:15:09 Uhr
Goto Top
Hi crazyhoesl,
vielen Dank für das Tutorial. Von diesem Tool habe ich noch nirgends gelesen bzw. gehört bis Vorgestern.
Wir werden demnächst das Ganze auf einigen Servern einsetzen. Und zwar dahin gehend, dass vom dem entsprechenden Event auch die Message in der E-Mail steht. Dazu habe ich ein VBScript - Schnipsel entworfen:
' Es werden alle Events mit der ID "20200" und aus dem Bereich "System" ausgelesen.  
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")  

Set colLoggedEvents = objWMIService.ExecQuery ("Select * from Win32_NTLogEvent Where LogFile = 'System' and EventCode ='20200'")  
For Each objEvent in colLoggedEvents
   Wscript.Echo objEvent.Message
 Exit For
Next
An hand diesem Script wird sichergestellt, dass immer nur das neuste Event ausgelesen wird.
Natürlich hat man die Möglichkeit, statt den EventCode auch folgende Attribute nehmen:
Category, Source Name, EventType, ComputerName, EventCode, RecordNumber, TimeWritten, User.
Das gleiche gilt natürlich für das Atttribut LogFile". Da gibt es folgende Alternativen:
Application, Security.

Die Message kann dann problemlos über eine Batchschleife ausgelesen und wenn gewünscht entsprechend verarbeitet werden (tokens, delims):
for /f "skip=3" %%a in ('cscript "eventlog.vbs"') do set message=%%a  

Grüße
Dani
aschinnerl
aschinnerl 02.12.2007 um 00:56:12 Uhr
Goto Top
Erstmal möchte ich danke für das super script sagen!

Ich habe vor das Script als Anmeldeüberwachung bei ein paar Server einzusetzen. Dh. ich möchte ein Mail erhalten wenn jemand versucht sich auf dem Server einzuloggen oder WENN jemand sich einloggt!

Das müsste mit diesem Tool doch ohne Probleme möglich sein oder?
6741
6741 29.02.2008 um 15:09:11 Uhr
Goto Top
hallo,

kann mir eine eine einfache schleife für eine batch erstellen mit sendmail ....

Quelle: Security
Ereigniskennung: 564

Danke ....
Dani
Dani 02.03.2008 um 12:53:28 Uhr
Goto Top
@aschinnerl
Das müsste mit diesem Tool doch ohne Probleme möglich sein oder?
Ist auf jeden Fall möglich....

@6741
ich habe es mit "bmail" gelöst:
@echo off

set sender=service@test.at
set empf=verteiler_1@test.at

for /f "skip=3 tokens=6,7,10,11 delims= " %%a in ('cscript "c:\test\message.vbs"') do (  
	echo %%a: %%b > "%temp%\mailtext.txt"  
	echo %%c:  %%d >> "%temp%\mailtext.txt"  
)

bmail -s MAILSERVER -t %empf% -f %sender% -a "BETTREFF" -h -c -m "c:\temp\mailtext.txt <---Mailtext"  

del "%temp%\mailtext.txt"  
Läuft bei uns auf einige hundert Servern.


Grüße
Dani
6741
6741 02.03.2008 um 13:20:07 Uhr
Goto Top
hi dani ...

du läßt erst das vb scriot laufen und dann versendest du mit bmail ???

mich würde interessieren, wenn der eventtrigger ein secutiry feststellt mit id xxx dann versende die mail ...

das muss doch mit einer einfach batch möglich sein, oder benötige ich immer das o.g. script ...?

Der Healthmonitor läuft bei mir nicht richtig, bzw ich kann ihn wohl nicht richtig einstellen.

Habe mal überwachen auf eine Freigabe eingestellt und etwas löschen wollen, was verweigert ist, dann soll die Mail kommen die mir die Info sendet ... im Eventlog ist alles okay... zur id gibt es noch eine weitere Kennung ... ID 560 und dazu die Kenne das gelöscht worden ist ...

gruß
Dani
Dani 02.03.2008 um 19:28:47 Uhr
Goto Top
Hi,
du hast glaube ich nur das Tutorial überfolgen. Denn die ID gibst du bereits hier an:
eventtriggers.exe /create /tr "Name des Triggers" /l "Ereignisart" /t "Ereignistyp" /so "Quelle" /eid "Ereignis-ID" /tk "BEFEHL"  
Bei mir war es ebenso, dass ich den Inhalt der ID auch wollte und in die Mail schreiben lassen habe. Dazu habe ich VBS gebraucht.
In deinem Fall würde die Batch reichen...Höchstens im Event stehen Daten, die gleich haben möchtest.

Wir machen demnächst einen Schritt weiter und lassen per Batch in unser Serververwaltung- & Managementdatenbank immer die Einträge machen.


Grüße
Dani
6741
6741 03.03.2008 um 18:37:34 Uhr
Goto Top
Hi Dani ...

ja du hast Recht .... ich hahe es nur Überflogen und nach Erstellen der Batch ( super Tool ) verstehe ich auch die Zusammenhnge ... sorry .... wohl etwas überarbeitet ..

schade das der Healthmonitor mir keine Werte bzw kein Action zeigt ....

aber später mehr ..
Tomiliy
Tomiliy 24.02.2009 um 12:29:44 Uhr
Goto Top
Hallo dani face-smile
Super die Scripte hier. Echt klasse. Hab ich schon viel von gelernt und genutzt.

Da du dich ja anscheinend mit VB auskennst..
Wie mache ich das so, das diese Abfrage in regelmäßigen Abständen läuft, aber nicht wieder über "alte" Fehler stolpert.

Es wäre also gut, wenn das script erkennen könnte, OB es auf einem Event schonmal gemailt hat und das dann natürlich nicht wieder tut.

Danke!!
Thomas
Jrlohni
Jrlohni 05.02.2022 aktualisiert um 16:46:46 Uhr
Goto Top
Moin zusammen,

leider bin ich nun durch diverse Posts und Kommentare noch weiter verwirrt, was ich für meine Anwendung genau benötige. Vielleicht könnte mir, trotzt des alters des Beitrages, mir noch jemand etwas helfen.

Ich möchte gerne eine Email erhalten, wenn in einem Ordner eine neue Datei auftaucht. Ich habe jetzt unterschiedliche Beiträge gelesen und bin maximal verwirrt. Als VBS und Batch Anfänger hatte ich gehofft hier etwas einfaches zum Anwenden zu finden.

Gruß
Johannes