Skryptowanie Windowsa: Perl

9 lipca 2009

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 ;)

Podobne notatki:

Może zainteresują Cię również następujące, pododbne notatki:

Nikt jeszcze nie skomentował tego wpisu.
Możesz być pierwszy.

Dodaj swój komentarz

Możesz użyć tych tagów XHTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Jeśli chcesz wstawić kilku linijkowy fragment kodu, użyj tagów <pre lang="x"></pre> (gdzie x język kodu np. cpp, perl, html). W ten sposób kod zostanie odpowiednio sformatowany i pokolorowany przez system.

Uwaga!

Na tym blogu działa system cache oraz filtr antyspamowy. Twój komentarz może być widoczny na stronie z pewnym opóźnieniem. Proszę o cierpliwość. Jeśli utraciłeś już wszystkie jej zasoby poinformuj mnie o tym, być może system uznał Cię za spamera ;)