Search PowerShellers and other PowerShell-related sites

Sunday, November 12, 2006

Osnove - Uvod u objektni model

Ključna stvar u čemu se Windows PowerShell razlikuje od sličnih shell okruženja jeste osobina da radi isključivo sa objektima. Rezultat komande koju kucate u shell-u na Linux-u je tekst. Na primer

#ps -e
PID TTY TIME CMD
1 ? 00:08:00 init
12021 ? 00:00:00 kdm



Ukoliko sada želimo da prekinemo proces kdm moramo da izdvojimo deo teksta koji se odnosi na broj procesa (PID kolona) i da ga prosledimo kao parametar komandi za prekid procesa (kill).

# ps -e | grep " kdm" | awk '{ print $1 }' | xargs kill



Problem ovog pristupa je da veci deo vremena provodimo formatirajući tekst, što može da bude složeno i zamorno, ali se zato sve komanda se izvršavaju gotovo trenutno.

Windows PowerShall sa druge strane radi sa objektima. Pogledajmo šta se dešava ako otkucamo komandu dir

PS> dir

Directory: Microsoft.PowerShell.Core\FileSystem::C:\

Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 9/23/2006 2:23 PM ATI
d---- 9/21/2006 10:41 PM Documents and Settings
...



Iako reuzultat izgleda kao par redova teksta, u stari u pitanju je niz objekata koji su tipa System.IO.FileInfo. Ukoliko vas ovo podseća na .NET, u pravu ste, osnova Windows PowerShell-a jeste .NET.

Komande su u stvari funkcije čiji su ulazi i izlazi objekti. Ako se vratimo našem primeru koji prekida proces kdm, ekvivalentan primer bi u PS bi bio:

PS> get-process kdm | stop-process



Vidi se da je zapis mnogo čitljiviji, jedina mana je što se malo gubino na brzini. Meni se iskreno ovo mnogo više sviđa, jer se kod lakše i brže piše.

Ovo se može mnogo bolje videti na malo složenijem primeru, sledeće komande prekidaju sve procese koji troše više od 10MB memorije.

bash

# ps -el | awk '{ if ( $6 > (1024*10)) { print $3 } }' | grep -v PID | xargs kill



Windows PowerShell

PS> get-process | where { $_.VS -gt 10M } | stop-process



Čak i ako nikada niste videli PowerShell, velika je verovatnoća da će te samo na osnovu koda razumeti o čemu se radi. Što se bash-a tiče tu ne bih bio tako siguran.

Ovo je tek početak, u sledećem tekstu videćemo da su i promenljive objekti. Takođe videćemo kako lako možemo da saznamo koji svi properties i methods postoje za neki objekat.

No comments: