Johannes: uptime

Beitrag lesen

#!/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.