#!/usr/bin/perl # Command: perl c4pEvents.pl "msg" use MIME::Lite; use Win32::EventLog; use strict; # Parameter die ggf. angepasst werden müssen my $MailServer = '10.1.1.1'; # Name oder IP des Mailservers my $To = 'admin@www.spe-gmbh.de'; # Empfänger der Nachricht my $From = 'c4pService@c4p.spe-gmbh.de'; # Absender der Nachricht #---------------------------------------------------------------------------# sub Abort { exit $_[0]; } #---------------------------------------------------------------------------# sub GetEvents { my ($recs, $base, $off, $count, $Text, $hashRef); my $handle=Win32::EventLog->new("Application", $ENV{ComputerName}) or return "Fehler: Anwendungsprotokoll kann nicht geoeffnet werden.\n"; $handle->GetNumber($recs) or return "Fehler: Anzahl der Ereignisse kann nicht gelesen werden.\n"; $handle->GetOldest($base) or return "Fehler: Aeltester Eintrag kann nicht gelesen werden.\n"; $off = $recs - 1; $count = 0; $Text = ""; while ($off >= 0 && $count < 10) { $handle->Read(EVENTLOG_BACKWARDS_READ|EVENTLOG_SEEK_READ, $base+$off, $hashRef) or return "Fehler: Eintrag $off kann nicht gelesen werden.\n"; if ($hashRef->{Source} eq "c4pService") { Win32::EventLog::GetMessageText($hashRef); my $Msg = $hashRef->{Message}; $Msg =~ s/\r\n*$//; # CRLF am Ende entfernen $Msg =~ s/\r\n/|/g; # eingebettete CRLF ersetzen my $EID = $hashRef->{EventID} & 1073741823; my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $idst) = localtime ($hashRef->{TimeGenerated}); $Text = $Text . sprintf ("%d %02d.%02d.%4d %02d:%02d:%02d %7d '%s'\n", $hashRef->{EventType}, $mday, $mon+1, $year+1900, $hour, $min, $sec, $EID, $Msg); $count++; } $off--; } return $Text; } #---------------------------------------------------------------------------# my $Msg = $ARGV [0]; Abort 100 if ($Msg eq ""); # Fehlerhafte Kommandozeile # Die Nachricht erzeugen: my $Text = "\nDurch den c4pService erzeugte Nachricht.\n" . "\nUrsprung: $Msg\n\n" . "----- Auszug aus der Ereignisanzeige für c4pService ----\n\n" . GetEvents() . "--------------------------------------------------------\n\n"; # siehe MIME::Lite Dokumentation für Schlüsselworte my $msg = MIME::Lite->new (To =>$To, From =>$From, Subject =>'c4pService Protokollmeldung', Data =>$Text); MIME::Lite->send ('smtp', $MailServer, Timeout=>60); $msg->send || Abort 120; exit 0;