IGRE

TELEFONI

HARDVER

SOFTVER

NAUKA

TV I FILM

DOGAĐAJI

INTERNET

NAJAVA

INTERVJU

VESTI


NOVI BROJ

ARHIVA

FORUM

O NAMA
SERVIS
Windows Powershell
Kratka priča o moćnoj školjci
Igor S. RUŽIĆ
1. avgust 2014.

U davna i pradavna PC vremena, kada mnogi koji čitaju naš časopis nisu bili ni u mislima svojih roditelja, glavni način automatizacije nekog rutinskog posla se svodio na pisanje DOS naredbi u tzv. Batch fajl (otuda ekstenzija .bat). Najčešća namena tih programčića je bila da učitaju svakojake drajvere za hardverske uređaje, postave putanje do važnih fajlova i podese računar za izvođenje programa. Onda na scenu stupa Windows koji donosi mnoga unapređenja, ali se rad sa komandnom linijom i dalje svodio na slabašni DOS. Sa druge strane, Unix/Linux je još od kraja 80-ih imao podršku za mnogo moćniji sistem Bash, koji je korisnicima omogućavao mnogo više nego DOS. Naglom ekspanzijom umrežavanja je postalo jasno da sistem administratori pod Linuxom imaju mnogo jače oružje u svojim rukama od onih kojima je primarni OS bio Windows.

Šta je to, malo, skriveno i vrlo moćno, ima ga svaki savremeni PC, ali malo koji korisnik zna da postoji?

Shvativši inferiornost na ovom polju, Microsoft 2003. godine kreće u razvoj skript jezika koji bi radio iz komandne linije. I tako je 2006. godine svetlost dana ugledala prva verzija PowerShella, koja je podržavala rad sa instaliranim Windowsom XP SP2/3, 2003 Server i Vista. Verzija 2.0 dolazi sa Windowsom 7 i Server 2008 R2. PowerShell 3.0 je sastavni deo Windowsa 8 i Servera 2012, dok nam verzija 4.0 dolazi uz Windows 8.1 i Server 2012 R2. Kreiranjem PowerShella, Windows ne samo da je anulirao prednosti koje je nudio Linuxov Bash, već ga je u brojnim stvarima i poprilično prestigao.

U svojoj suštini, PowerShell je skript jezik baziran na .Net Framework sistemu i čini njegov sastavni deo. Preko njega administratori dobijaju mogućnost upravljanjem sa COM i WMI podsistemom, kako na lokalnom tako i na udaljenim računarima. To opet znači da administrator može da automatizuje ogroman broj operacija čije je rešavanje ranije bilo dosta komplikovanije. Glavni oblik komunikacije korisnika sa PowerShellom vrši se preko tzv. komandletova (cmdlets), koji predstavljaju osnovne komande izvedene preko .net platforme. Pošto se ispod celog sistema nalazi .net, moguće je napisati komandlet u bilo kom .net programskom jeziku i on postaje ravnopravni član naše cmdlet porodice. Sjajno je što korisnik može da koristi postojeće komandletove u svojim skriptovima praveći nove naredbe na osnovu njih. Da vidimo na šta liče ti komandletovi.

Pre toga da se ukratko osvrnemo na različite načine startovanja PowerShella. To možemo uraditi preko komandne linije kucajući komandu powershell ili pokretanjem odgovarajuće stavke u Start meniju. U oba slučaja bi trebali dobiti komandni prozor u kome piše nešto kao:

Windows PowerShell

Copyright (C) 2013 Microsoft Corporation. All rights reserved.

Tačan natpis će naravno zavisiti od verzije PowerShella koja je instalirana na sistemu. Osim komandnog prozora postoji mogućnost zapuštanja PowerShella iz ISE-a (Integrated Scripting Environment). U pitanju je interfejs koji umnogome olakšava pisanje komandletova i njihovo izvršavanje uz sve udobnosti koje pruža jedno integrisano radno okruženje (debager, help sistem, automatsko kompletiranje komandi, sintaksno bojenje koda itd.).

Osim uvodnog teksta, u našem slučaju na dnu komandnog prozora PowerShella imamo liniju:

PS C:\Windows\system32>

„PS” je oznaka da se nalazite u komandnoj liniji PowerShell interpretera, dok je ostatak linije isti kao i u „običnom” interpreteru komandne linije. Ako ste zaljubljenik u kompjutere, vrlo je verovatno da vam je poznata DOS komanda dir koja izlistava sadržaj tekućeg direktorijuma (iliti foldera). Otkucajmo komandu dir i pritisnimo ’Enter’. Pred nama se pojavljuje sadržaj foldera Windows/system32. Iako bi se očekivalo da je dir jedan od komandleta koji izvodi PowerShell operacije, to nije sasvim tačno. Dir je u stvari alias za komandlet Get-ChildItem. Otkucajte sada komandu Get-ChildItem i pritisnite ’Enter’, videćete potpuno isti efekat. Sada otkucajte Linux komandu ls, koja radi isti posao kao i dir u DOS-u. Opet isti efekat kao u prethodna dva slučaja. I tu nije kraj, pošto postoji još jedan alias sa istom namenom - gci (očigledno akronim za Get-ChildItem). Da stvar bude još lepša, možemo i sami kreirati aliase po svojim potrebama i na taj način olakšati rad sa komandletovima. Ukoliko želite saznati sve aliase koji postoje u PowerShellu, otkucajte :

dir Alias:\

Naravno, umesto dir možete napisati i ls ili gci i dobiti isti rezultat. Fleksibilno, zar ne? Slična je situacija i sa ostalim važnim komandama za manipulaciju fajl sistema.

U tabeli možete primetiti još jednu zakonitost vezanu za komandletove. Ukoliko pažljivije pogledate njihove nazive, videćete da se sastoje iz dva dela. Prvi deo je glagol, dok drugi predstavlja objekat. Tako dobijamo sledeće konstrukcije:

Set-Alias = kreirati alias

Get-Alias = prikazati spisak aliasa

Get-Help = prikazati help

New-Item = napraviti novi objekat

Remove-Item = udaljiti neki objekat

Posebno su zanimljive ove poslednje konstrukcije koje se odnose na kreiranje i brisanje objekta. PowerShell se dosledno drži objektne orijentacije, tako da sve ono sa čim operiše smatra objektima, počevši od fajlova na hard-disku, ili instaliranih programa, preko zapisa u registru, korisnika sistema, priključenog hardvera, pa sve do stavki koje obuhvata Active Directory. Tako, na primer,

set-location hklm:\hardware\devicemap

izvršava operaciju lociranja nad objektom koji ukazuje na lokaciju u sistemskom registru. Umesto registra možemo da ukažemo na neki drugi objekat, recimo, fajl na hard-disku ili sadržaj u bazi Active Directory i PowerShell će uvek odraditi svoj posao.

Napredniji korisnici se u radu često susreću sa takozvanim varijablama radne sredine (environment variables), koje su ovde samo jedna od vrsta objekata za već spomenuti komandlet:

Get-ChildItem Env:

Početnike će svakako obradovati odličan Help podsistem koji ide uz PowerShell. Do pomoći stižemo sa komandletom Get-Help ili preko aliasa help. Spisak svih komandi možete dobiti preko Get-Command i otuda možete izabrati bilo koju komandu o kojoj želite dobiti podrobne informacije. Na primer:

Get-Help Get-Service

daje informacije o sintaksi i opisu naredbe. Ukoliko pak napišete:

Get-Help Get-Service -examples

dobićete mnoštvo odličnih primera koji demonstriraju rad sa komandletom Get-Service. Jedino nam preostaje da iskopiramo kôd prikazan u okviru Helpa i pokrenemo ga iz PowerShella. Teško da postoji bolji način za privikavanje ovom okruženju.

Ukoliko želite da dobijete informacije o nekom određenom terminu, navodite ga posle komande Get-Help. Na primer:

get-help folder

daje informacije o svim elementima PowerShella u kojima se u nazivu ili opisu spominje reč folder (npr. nazivi komandletova, funkcija i delova Helpa). Ovaj sistem poznaje i tzv. džoker znakove, pa tako:

get-help f*

daje sve rezultate za funkcije, aliase, komandletove i provajdere koji počinju sa slovom „F”.

Treba napomenuti važnu činjenicu da PowerShell ne pravi razliku između velikih i malih slova, pa je naredbu moguće pisati kako malim, tako i velikim slovima ili pak proizvoljnom kombinacijom jednih i drugih. Osim toga, zbog podrške za Unicode standard, komandna linija prihvata i latinična slova sa „kvačicama”, kao i celokupnu ćirilicu. To opet znači da će se naši komandleti izvršavati i u slučaju da smo im dodelili imena na srpskom jeziku. Ista stvar važi i za varijable i funkcije koje će se uspešno izvršavati ukoliko im dodelimo nazive bilo na latinici, ćirilici, arapskom, mandarinskom, hebrejskom pismu ili kombinacijom svih njih zajedno.

Malo prakse

Iako je prvenstveno namenjen upotrebi od strane profesionalaca, PowerShell može da se pokaže korisnim i za „obične” korisnike za obavljanje raznoraznih poslova. Na primer, iz okvira interpretera možete direktno startovati programe koji se nalaze u sistemskim folderima. Ukoliko otkucamo:

regedit

pred nama se pojavljuje prozor sa programom za upravljanje sistemskim registrom. Ukoliko pak otkucamo:

Get-Process regedit (ili ps regedit)

dobijamo osnovne podatke o procesu pod ovim nazivom:

Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName

------- ------ ----- ----- ----- ------ -- -----------

94 11 4276 7760 77 0.20 8772 regedit

Ukoliko otkucamo samo:

Get-Process (ili ps)

dobićemo spisak svih procesa pokrenutih na računaru.

(ps regedit).StartTime

će ispisati vreme kada je proces pokrenut, a

(ps regedit).Kill()

prekida rad programa Regedit itd. Spisak svih operacija koje možete izvršiti nad danim objektom dobijate komandom:

ps regedit | Get-Member

Pogledajmo još jedan praktično koristan primer. Recimo da je potrebno da zaustavimo neki od sistemskih servisa. Za primer ćemo uzeti Google Updater servis koji je vrlo verovatno prisutan na vašem sistemu. Prvo sledećom komandom ispitujemo stanje servisa:

get-service gusvc

Status Name DisplayName

------ ---- -----------

Running gusvc Google Updater Service

Zatim zaustavljamo servis sa stop-service gusvc i ponovo proveravamo njegovo stanje sa get-service gusvc. Videćemo da u polju Status sada piše Stopped. Ponovno aktiviranje servisa se vrši preko start-service gusvc.

Ukoliko vas mrzi da svaki put pišete get-service ili neki drugi komandlet, jednostavno kreirajte njegov alias. Get-Service možemo pisati kao gs ukoliko izvršimo sledeći kod:

Set-Alias gs Get-Service

Varijable i funkcije

Kao što se moglo očekivati, PowerShell podržava rad sa varijablama. Svaka varijabla počinje sa znakom „$”. Na primer:

$a=7785

$casopis="Svet Kompjutera”

Ukoliko varijabla ima sledeći oblik:

${C:\probni.txt} = „Zapisivanje direktno u fajl”

biće zapisana direktno u tekstualni fajl probni.txt

Ukoliko želimo da tačno naglasimo tip varijable, pišemo ih na sledeći način:

[int]$a=7785

[string]$casopis="Svet Kompjutera”

Moguće je i dodeljivanje više vrednosti odjednom:

$var1, $var2, $var3 = 1, 2, 3

Varijable se mogu kreirati i preko New-Variable komandleta na sledeći način:

New-Variable -Name naziv -Value „Svet Kompjutera” -Description „naziv casopisa”

Ukoliko nameravamo da koristimo matematičke funkcije koje dolaze sa .net frejmvorkom, pisaćemo ih ovako:

[Math]::Exp($a)

[Math]::Sqrt($a)

Stringove je moguće dodavati jedan na drugi:

$naziv = „Svet „

$naziv += „Kompjutera”

$naziv

ili to isto možemo odraditi korišćenjem .net objekta Stringbuilder:

$stringbuilder = New-Object -TypeName System.Text.StringBuilder

$priv = $stringbuilder.Append(„Svet”)

$priv = $stringbuilder.Append(„ „)

$priv = $stringbuilder.Append(„Kompjutera”)

$stringbuilder.ToString()

U PowerShellu korisnik može da kreira funkcije uz pomoć ključne reči function. Definicija jedne vrlo proste funkcije bi izgledala ovako:

Function Množenje ($var1, $var2)

{

$proizvod = $var1 * $var2

Write-Host „Proizvod množenja dva broja je: $proizvod”

}

Pri izvršenju funkcije navodimo njen naziv i argumente bez zagrada, razdvojene sa znakom razmaka:

Mnozenje 8 7

Nije potrebno da napominjemo da PowerShell poseduje podršku za sve komande za kontrolu toka koje podržavaju savremeni programski jezici i zahvaljujući svom baziranju na moćnom .net frejmvorku, moći ćete da isprogramirate praktično sve što vam padne na pamet.

• • •

Cilj ovog teksta nije bio da posluži kao nekakav tutorijal za PowerShell, pošto bi nam jedan takav poduhvat zauzeo bar pola časopisa. Namera nam je bila da široj publici predstavimo nešto što već postoji u njihovom operativnom sistemu, a što mnogima nije poznato. Glavna namena PowerShella je da automatizuje procese vezane za održavanje Windows infrastrukture, ali može da posluži i za mnogo drugih stvari. Ukoliko ste zainteresovani za dublje izučavanje ovog moćnog interpretera, na internetu ćete pronaći mnoštvo literature koja u celosti razotkriva sve njegove tajne. Ukoliko vas privlači sistemsko administriranje i sa njime nameravate profesionalno da se bavite, ovo je instrument koji će vam jako mnogo značiti.


PRETHODNI TEKST
SLEDEĆI TEKST
NAJČITANIJE
IGRE
TELEFONI
HARDVER
SOFTVER
NAUKA
aktuelno štampano izdanje
JANUAR 2020
Asus ROG Phone II
Snapdragon 855+, 6,59” AMOLED @120 Hz HDR, 12 GB RAM-a, 6000 mAh baterija...
Nvidia GeForce GTX 1650 Super vs AMD Radeon RX 5500 XT
AMD još uvek ume da prilično vispreno napadne protivnika kada je to najmanje neočekivano...
Antec Striker Mini-Watercool
Ovakva kućišta ne kupuju se sa idejom o vrednosti za uloženi novac, već kao osnova i inspiracija za jedinstveni sistem...
DJI Agras T16
Ova letelica se komotno može svrstati meðu klasiènu poljoprivrednu mehanizaciju...
Esencijalni Windows programi
Windows 10 se zaista razlikuje od svojih prethodnika po broju i kvalitetu uključenog softvera, ali on je dovoljan samo da zadrži vodu dok majstori ne odu...
Microsoft Windows 10 2004 Insider Preview
Stiče se utisak da je Microsoft napravio „polukorak”, nešto između novembarskog updatea i klasičnih nadogradnji na koje nas je navikao...
Napredna primena dronova
Neprestani razvoj tehnologija na kojima su zasnovani dronovi konstantno povećava granice mogućnosti ovih korisnih uređaja...
IGRA MESECA
Darksiders Genesis
Igra koja izgleda kao interaktivni omot albuma hard core heavy metal benda iz osamdesetih godina prošlog veka...
Phoenix Point
Phoenix Point obrađuje istu temu kao slavni X-COM: Terror from the Deep, ali na mnogo ozbiljniji način.
Strategic Command
World War I
Ova igra je istovremeno jedinstvena i zarazna, pogotovo za ljubitelje ratne istorije...
Mechwarrior 5
Mercenaries
Iako nije igra koju smo priželjkivali, MW5: Mercs sadrži dovoljno pozitivnog da razgali srca i starih fanova i novih igrača...
© 2020 Svet kompjutera. Sva prava zadrzana.
Novi broj - Arhiva - Forum - O nama