Skryptowanie Windowsa: Perl

Ostatnio musiałem popracować nad dyplomówką, przez co kolejny wpis o skryptowaniu windowsa się gdzieś zapodział i trochę opóźnił. Tym razem o pisaniu skryptów w naszym ulubionym języku, czyli Perlu.

W ostatniej notce poświeconej WSH wspominałem, że można bez problemu "podłączyć" dowolny silnik i korzystać z dowolnego języka do skryptowania jak Perl, Python, Lips, czy cokolwiek innego.

W przypadku naszego Perla sprawa wygląda o tyle prościej, że wystarczy skorzystać z modułu Win32::OLE i cieszyć się możliwościami jakie daje ta technika. To nie wszystko, zasoby CPAN zawierają bardzo dużo modułów przeznaczonych dla systemu Windows, większość przydatnych nam modułów oznaczona jest prefiksem Win32::, ale sama biblioteka modułów dla Windowsa zawiera ich o wiele, wiele więcej.

Odpowiednik perlowy naszego skryptu uptime w VBScript mógłby wyglądać tak:

use strict;
use Win32::OLE qw(in);
use Win32::OLE::Variant;
use Time::Local;
 
my $strComputer = '.';
 
my $objWMIService = Win32::OLE->GetObject('winmgmts:\\\\' . $strComputer . '\\root\\cimv2');
foreach my $objOS (in $objWMIService->InstancesOf('Win32_OperatingSystem')) {
	my $objSWbemDateTime = Win32::OLE->new('WbemScripting.SWbemDateTime');
	$objSWbemDateTime->{Value} = $objOS->LastBootUpTime;
 
	my $bootTime = timelocal($objSWbemDateTime->Seconds, $objSWbemDateTime->Minutes,
				$objSWbemDateTime->Hours, $objSWbemDateTime->Day,
				$objSWbemDateTime->Month - 1, $objSWbemDateTime->Year);
	my $nowTime = timelocal((localtime)[0..5]);
 
	my $difference = $nowTime - $bootTime;
	my ($seconds, $minutes, $hours, $days);
	$seconds    =  $difference % 60;
	$difference = ($difference - $seconds) / 60;
	$minutes    =  $difference % 60;
	$difference = ($difference - $minutes) / 60;
	$hours      =  $difference % 24;
	$difference = ($difference - $hours)   / 24;
	$days       =  $difference;
 
	my $strUptime = "$hours:$minutes:$seconds";
	if ($days == 1) { $strUptime = "$days day, $strUptime"; }
	elsif ($days > 0) { $strUptime = "$days days, $strUptime"; }
 
	print 'Uptime: ' . $strUptime;
}

Ogólna budowa i korzystanie z WSH jest bardzo podobne. Komentarza może wymagać odjecie 1 od miesiąca, w którym uruchomiono system. localtime zwraca numer miesiąca w przedziale 0-11, wiec aby zachować odpowiednią różnicę, najprościej wykonać to działanie.

Jak widać dzięki Win32::OLE w bardzo łatwy sposób możemy tworzyć skrypty i narzędzia korzystające z możliwości WSH, a także w pełni korzystać z możliwości jakie daje technologia OLE. A jeśli to nie wystarcza, możemy skorzystać z wielu innych modułów perlowych do zabaw z Windowsem.

A co sam Microsoft myśli o Perlu?
Perl of Wisdom.

Bardzo zachęcam do zabaw z Perlem ;)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *