Johannes: uptime

Wie müsste folgende Funktion aussehen, damit mir die letzte EventID von 6005 zurückgegeben wird?
Momentan erhalte ich immer die gleiche Zeit:
Win2000 has been running for 12 day(s), 4 hour(s), 58 minute(s) and 22 second(s)

sub eventlog {
  my $Eventlog = Win32::EventLog->new("System", $ENV{ComputerName}) || die "Can't open Application EventLog: $!\n";
  $Eventlog -> GetNumber(my $number) || die "EventLog GetNumber() failed: $!\n";
  $Eventlog -> GetOldest(my $oldest) || die "EventLog GetOldest() failed: $!\n";

my $i = 0;
  while ($i < $number) {
    $Eventlog->Read(EVENTLOG_BACKWARDS_READ|EVENTLOG_SEEK_READ, $oldest+$i, my $event) || die "Can't read EventLog entry $i";
      $event->{"EventID"} = $event->{"EventID"} & 0xffff;
      if ($event->{"EventID"} == 6005) {
        timeres($event->{TimeGenerated});
        last;
    }
    $i++;
  }

  1. Hallo Johannes,
    also ich habe mir den Code mal rudimentär durchgeschaut,
    ich kenne zwar die instanzmethode eventlog nicht aber ist ja auch egal.
    Ich weiss nicht ob es ein schreibfehler von dir ist, aber wie soll er jemals aus der Whileschleife rauskommen geschweigedenn den die Variable $i erhöhen ?

    "
      my $i = 0;
      while ($i < $number) {
        $Eventlog->Read(EVENTLOG_BACKWARDS_READ|EVENTLOG_SEEK_READ, $oldest+$i, my $event) || die "Can't read EventLog entry $i";
          $event->{"EventID"} = $event->{"EventID"} & 0xffff;
          if ($event->{"EventID"} == 6005) {
            timeres($event->{TimeGenerated});
            last;
        }
        $i++;
    "
    hier müsstest du auch schon $i in den While block reinschreiben, da er sonst immer nur den selben wert bearbeitet und natürlich nicht mehr die schleife verlässt.

    Vielleicht war das ja der fehler und vielleicht hast du ihn ja auch schon selber entdeckt, sollte ich jetzt völlig falsch liegen schreib mir bitte ne antwort

    Gruß Urmel

    1. Hi,

      Vielleicht war das ja der fehler und vielleicht hast du ihn ja auch schon selber entdeckt, sollte ich jetzt völlig falsch liegen schreib mir bitte ne antwort

      das war nur die abschließende Klammer der If-Anweisung (Die abschließende Klammer des Unterprogramms habe ich beim kopieren hier ins Forum vergessen)
      Ich verwende das Modul Win32::EventLog.

      Grüße, Johannes

      1. Hallo nochmal,
        also es wäre ganz gut wenn du den ganzen quelltext oder zumindest den den man braucht, um die sache mal bei sich ans laufen zu bringen, posten könntest.
        Was gut wäre, wenn du die module die man braucht hinzuschreiben würdest.

        Falls du die sache schon geklärt haben solltest, schreib es bitte.

        Gruß Urmel

        1. #!/usr/bin/perl

          use strict;
          use warnings;
          use diagnostics;
          use Win32;
          use Win32::EventLog;

          my $os = Win32::GetOSName();

          if (Win32::IsWinNT()) {
            eventlog() || tickcounts();
          }

          else {
            tickcounts();
          }

          sub tickcounts {
            my $milliseconds = Win32::GetTickCount();
            timeres($milliseconds);
          }

          sub timeres {
            my $days = $_[0] / 86400000;
            my $hours = ($days - int($days)) * 24;
            my $min = ($hours - int($hours)) * 60;
            my $sec = ($min - int($min)) * 60;

          $days = sprintf("%.0f", $days);
            $hours = sprintf("%.0f", $hours);
            $min = sprintf("%.0f", $min);
            $sec = sprintf("%.0f", $sec);

          print "\n$os has been running for $days day(s), $hours hour(s), $min minute(s) and $sec second(s)\n";
            exit;
          }

          sub eventlog {
            my $Eventlog = Win32::EventLog->new("System", $ENV{ComputerName}) || die "Can't open Application EventLog: $!\n";
            $Eventlog -> GetNumber(my $number) || die "EventLog GetNumber() failed: $!\n";
            $Eventlog -> GetOldest(my $oldest) || die "EventLog GetOldest() failed: $!\n";

          my $i = 0;
            while ($i < $number) {
              $Eventlog->Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ, $oldest+$i, my $event) || die "Can't read EventLog entry $i";
              $event->{"EventID"} = $event->{"EventID"} & 0xffff;
                if ($event->{"EventID"} == 6005) {
                  timeres($event->{TimeGenerated});
                  last;
                }
              $i++;
            }
          }

          __END__

          Reports the uptime of Windows systems.

          1. Hallo Johannes,
            ich habe im moment leider nicht soviel zeit, ich werde versuchen heute abend mich damit zu befassen.
            Wenn du das problem schon gelöst haben solltest,  um so besser.
            Gruß Urmel