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