1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
sub GetEvents
{
# declare l'ensemble des variables locales
my ($total,$oldest,$evtHashRef,
$numeroenregistrement,$source,$computer,$categorie,
$eventtype,$heuregeneration,$heureecriture,$resultat,$evtoutputfile,
$servermail, $vers,$depuis,$sujet,$start,$cmd,$test,$test1,$file,$sec,$min,$hour,$mday,
$mon,$year,$wday,$yday,$isdst);
# initialisation des variables
$start = 1;
$test = 0;
# récupére les différentes parties de la date et heure local et les affectent
# dans des variables
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon++;
$mday=sprintf("%02d",$mday);
$mon=sprintf("%02d",$mon);
$hour=sprintf("%02d",$hour);
$min=sprintf("%02d",$min);
$sec=sprintf("%02d",$sec);
# création d'une variable contenant une réference au journal de la machine
$evt = Win32::EventLog->new("$Log","\\\\$server") || die "Could not open $Log log on $server: $!\n";
# calcul le nombre total d'evenement du journal est affecte le résultat dans $total
$evt->GetNumber($total) || die "Can't get number of EventLog records: $!\n";
# Si le journal est vide, on donne 1 comme valeur à test.
if ($total == 0)
{
$test = 1;
}
# Si test = 1 on ne passe pas dans la boucle et on envoie pas de mail
if ($test == 0)
{
# génére le fichier de sortie
$evtoutputfile = "$rep\\Extract\\$server-$Log-$mday$mon$year-$hour h $min min $sec s.txt";
#ouvre le fichier de destination de l'inventaire en écriture
open ( EVTOUTPUT, ">$evtoutputfile" ) || die "Impossible de creer $evtoutputfile : $!\n";
# tant qu'on est pas à la fin du journal d'event
while ($start < $total)
{
# indique que l'on lit le journal dans l'ordre croissant en commençant
# par l'enregistrement 1. On affecte ce qui est lu dans la variable
# $evtHashRef
$evt->Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,$start,$evtHashRef)
or die "Can't read EventLog entry on $server\n";
# format l'eventID afin qu'il soit lisible et le stocke dans une
# variable id
$id = (${$evtHashRef}{EventID} & 0xffff);
# On exécute la fonction searchEvent afin de vérifier que le numéro
# d'événement a besoin d'être remonté
# Le résultat de cette fonction est stocké dans $resultat
$resultat = searchEvents();
if ($resultat == 1)
{
# On récupere dans des variables separées les valeurs de
# l'enregistrement du journal
$numeroenregistrement = ${$evtHashRef}{RecordNumber};
$source = ${$evtHashRef}{Source};
$computer = ${$evtHashRef}{Computer};
$categorie = ${$evtHashRef}{Category};
$eventtype = ${$evtHashRef}{EventType};
$heuregeneration = localtime(${$evtHashRef}{TimeGenerated});
$heureecriture = localtime(${$evtHashRef}{Timewritten});
# on réalise l'affichage des variables
print EVTOUTPUT "-" x 75 . "\n";
print EVTOUTPUT "Nom de journal: $Log\n";
print EVTOUTPUT "Numero d'enregistrement: $numeroenregistrement \n";
print EVTOUTPUT "Source de l'event: $source\n";
print EVTOUTPUT "Nom de l'ordinateur: $computer\n";
print EVTOUTPUT "Categorie: $categorie\n";
print EVTOUTPUT "Event ID: $id\n";
print EVTOUTPUT "Type d'evenement: $eventtype\n";
print EVTOUTPUT "Heure de generation: $heuregeneration\n";
print EVTOUTPUT "Heure d'ecriture: $heureecriture\n";
# formatage de l'utilisateur
my $sid = unpack("H" . 2 * length(${$evtHashRef}{User}), ${$evtHashRef}{User});
print EVTOUTPUT "Utilisateur: ".$sid."\n";
Win32::EventLog::GetMessageText($evtHashRef);
my $msg = $evtHashRef->{Message};
print EVTOUTPUT "Description: $msg\n";
print EVTOUTPUT "\n\n";
}
$start++;
}
close (EVTOUTPUT);
}
$file = 0;
open ( OUT, "$evtoutputfile" ) || die $file = 1 ;
read(OUT,$test1,10);
close (OUT);
if ($test1 != "" && $file == 0)
{
# Envoi du resultat par mail
$servermail = 'toe45060.cst.cnes.fr';
$vers = 'beaujaua@toe45060.cst.cnes.fr';
$depuis = "Administrateur";
$sujet = "Extraction du journal des evenement";
$cmd = $rep.'\postie -host:'.$servermail.' -port:smtp -to:'.$vers.' -from:'.$depuis.' -s:"Extraction des ERREURS du '.$mday.'/'.$mon.'/'.$year.' à '.$hour.':'.$min.':'.$sec.' " -file:"'.$evtoutputfile.'"';
system ('postie -host:'.$servermail.' -port:smtp -to:'.$vers.' -from:'.$depuis.' -s:"Extraction des ERREURS du '.$mday.'/'.$mon.'/'.$year.' à '.$hour.':'.$min.':'.$sec.' " -file:"'.$evtoutputfile).'"';
}
} |
Partager