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