Scripts Perl

Dernière mise à jour : 26/05/2016

Journal événements Windows

Énoncé

Écrivez un script qui va déterminer quand une machine machine est allumée et éteinte. Pour ce faire, allez lire dans l'observateur d’événements quand le "EventLog" démarre et s’arrête.

Solution

#!/usr/bin/perl

# (c) Sébastien Adam 2013
# Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage
# dans les Mêmes Conditions 2.0 Belgique.

use Win32::EventLog;

$appli_log = Win32::EventLog->new("System");
$appli_log->GetNumber($recs) or die "$0: Can't get number of EventLog records\n";
$appli_log->GetOldest($base) or die "$0: Can't get number of oldest EventLog record\n";
print "+------------+-----------+-----------+\n";
print "|    Date    | Démarrage |   Arrêt   |\n";
print "+============+===========+===========+\n";
$x = 0;
while ($x < $recs) {
  $appli_log->Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,$base+$x,$hashRef) or die "Can't read EventLog entry #$x\n";
  if ($hashRef->{Source} eq "EventLog") {
    Win32::EventLog::GetMessageText($hashRef);
    if(
      (index($hashRef->{Message},"The Event log service was stopped") >= 0)
      ||
      (index($hashRef->{Message},"Le service d’Enregistrement d’événement a été arrêté") >= 0)
      ) {
      ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($hashRef->{TimeGenerated});
      $date = sprintf("%02d/%02d/%4d",$mday,$mon+1,$year+1900);
      $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
      print "| $date |           |  $time |\n";
      print "+------------+-----------+-----------+\n";
    } elsif(
      (index($hashRef->{Message},"The Event log service was started") >= 0)
      ||
      (index($hashRef->{Message},"Le service d’Enregistrement d’événement a démarré") >= 0)
      ) {
      if($start ne "") {
        print OUTPUT "$date;$start;$stop\n";
      }
      ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($hashRef->{TimeGenerated});
      $date = sprintf("%02d/%02d/%4d",$mday,$mon+1,$year+1900);
      $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
      print "| $date |  $time |           |\n";
      print "+------------+-----------+-----------+\n";
    }
  }
  $x++;
}
$appli_log->Close;