Pisanje svakog “ozbiljnijeg” komada programskog koda praktično je nemoguće bez mehanizma za privremeno čuvanje rezultata izvođenja neke funkcije ili izraza, kako bi se njime kasnije moglo koristiti u drugoj naredbi. Za to se u različitim programskim jezicima, pa tako i u PowerShell skriptama, rabe varijable.
Varijabla se u PowerShellu deklarira automatski, tako da joj se dodijeli početna vrijednost. Nema potrebe za posebnim korakom za deklaraciju varijable. Obavezni prefiks svake varijable, po kojem se ona razlikuje od ostalih dijelova skripte ili PowerShell naredbi, je znak “$”. Također, prilikom odabira naziva varijable ne razlikuju se mala i velika slova. Slijedi nekoliko osnovnih primjera korištenja varijablama.
$cijena = 100
$kolicina = 10
$iznos = $cijena * $kolicina
$iznos
1000
Slika 1. Osnovni primjeri korištenja varijablama u PowerShellu
Podrazumijevana vrsta varijable je niz znakova (engl. string), ali se prilikom dodjeljivanja vrijednosti varijabli može odrediti i vrsta. Navedena mogućnost prikazana je u nastavku uz primjer dodjeljivanja neispravne i ispravne vrijednosti podatka cjelobrojnoj varijabli.
[Int]$kolicina = "kolicina 10"
Cannot convert value "kolicina 10" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ [Int]$kolicina = “kolicina 10”
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
[Int]$kolicina = 10
Kod pokušaja dodjeljivanja niza znakova varijabli, za koju želimo da bude cjelobrojna vrijednost, dolazi do pojave greške uz detaljan opis problema.
Definiranjem vrste varijable automatski se dobiva mogućnost korištenja posebnih dodataka dostupnih za pojedinu vrstu varijable. Na primjer, za datume je to mogućnost dodavanja razdoblja:
[datetime]$danas = Get-Date
$danas
22. rujna 2019. 13:44:10
$danas.AddDays(3)
25. rujna 2019. 13:44:10
U istom koraku vrijednost se može dodijeliti većem broju varijabli, kao što je to prikazano na sljedećoj slici, gdje se rezultat funkcije ipconfig istovremeno dodjeljuje varijablama $config1 i $config2.
Slika 2. Istovremeno dodjeljivanje vrijednosti većem broju varijabli
Prethodni primjer također pokazuje kako vrijednost pojedine varijable može biti složena vrijednost sastavljena od više dijelova, poput mrežne konfiguracije računala (o tome nešto više drugi put).
Trenutačno dostupne varijable mogu se dobiti pomoću naredbe Dir variable:
Slika 3. Pregled trenutačno definiranih varijabli
U popisu varijabli, osim onih koje smo definirali izvođenjem vlastitih naredbi za dodjeljivanje vrijednosti varijablama, pojavljuje se i veći broj automatski definiranih varijabli. Primijetite da su na samom početku dodijeljene dvije vrijednosti varijablama istog, ali različito napisanog naziva (velika i mala slova). Zbog toga što PowerShell ne razlikuje velika i mala slova, definirana je samo varijabla u prvom obliku, a zadnja vrijednost joj je dodijeljena pomoću druge naredbe.
Posebnim načinom pisanja naredbe Dir moguće je filtrirati varijable pomoću dijela naziva varijable. Na primjer, naredba: Dir:variable:*maximum*
kao rezultat izvođenja vraća (se ovaj se je sigurno viška) sljedeće vrijednosti:
Name Value
---- -----
MaximumErrorCount 256
MaximumVariableCount 4096
MaximumFunctionCount 4096
MaximumAliasCount 4096
MaximumDriveCount 4096
MaximumHistoryCount 4096
Vrijednost pojedinačne varijable, osim običnim navođenjem naziva varijable, može se prikazati i pomoću naredbe Get-Variable.
Get-Variable test1
Name Value
---- -----
test1 100
Vrijednost varijable, osim izravnim navođenjem vrijednosti nakon znaka “=”, može se izmijeniti i pomoću naredbe Set-Variable. U ovom drugom slučaju prije naziva varijable ne navodi se znak “$”.
$test1 = 100;
Set-Variable test1 101;
U slučaju da je potrebno provjeriti postoji li neka varijabla (npr. $test1 iz prethodnog primjera), to se može napraviti pomoću naredbe Test-Path. Na primjer:
Test-Path variable:test11
False
Test-Path variable:test1
True
Ako neka varijabla više nije potrebna, može se obrisati pomoću naredbe del. Na primjer:
del variable:test1
Test-Path variable:test1
False
Da se vrijednost neke varijable ne bi slučajno izmijenila ili obrisala, varijabla se može definirati kao varijabla namijenjena “samo za čitanje”. Za to služi naredba New-Variable, pri čemu nije potrebno navoditi znak “$” uz naziv varijable.
Sljedeći primjer pokazuje kako se varijabli u istoj naredbi ujedno može dodati i njezin opis, ako je to potrebno za kasnije jednostavnije razumijevanje uloge varijable u PowerShell skriptama.
New-Variable test1 -value 100 -description "samo za čitanje" -option ReadOnly
Naknadni pokušaj izmjene vrijednosti ili brisanja tako definirane varijable dovodi do greške, kao što to pokazuje sljedeća slika.
Varijabla definirana samo za čitanje može se ipak obrisati navođenjem dodatnog parametra force:
del variable:test1 –force
Za izmjenu vrijednosti takve varijable potrebno je prvo obrisati varijablu na prije prikazan način, a nakon toga je ponovo definirati s novom vrijednosti pomoću naredbe New-Variable.
Slika 4. Primjer definiranja varijable namijenjene “samo za čitanje”
Zamjenom parametra ReadOnly parametrom Constant prilikom definiranja nove varijable, brisanje varijable više nije moguće čak ni uz navođenje parametra force. To automatski znači da više nije moguća ni izmjena vrijednosti varijable njezinim brisanjem i ponovnom pripremom. Varijabla definirana kao konstanta ostaje aktivna tako dugo dok postoji prozor PowerShella u kojem se rabi. Tek zatvaranjem prozora nestaju sve definirane konstante.
Pomoću običnih naredbi Dir ili Get-Variable nije moguće vidjeti vrijednost varijabli kojima je zbog jednostavnijeg prepoznavanja i upotrebe u skriptama dodijeljen opis. Za prikaz vrijednosti varijabli s dodijeljenim opisom treba se koristiti naredbom Get-ChildItem, pri čemu je potrebno navesti dodatne parametre, kao što je to slučaj u sljedećem primjeru:
Get-Childitem variable:test1 | Format-Table Name, Description -AutoSize -Wrap
Name Description
---- -----------
test1 samo za čitanje
Slika 5. Primjer naredbe za prikaz dodatno definiranog opisa varijable
Varijablama se u prozoru PowerShella može definirati i djelokrug odgovarajućim prefiksima: private, local, script i global.
Korištenje djelokrugom skripti i automatskim varijablama detalinije ćemo objasniti kad se njima počnemo koristiti u okviru složenijih primjera skripti u budućim tekstovima i primjerima.