POWERSHELL - Varijable

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

 

slika01.png

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.
 

slika02.png

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:

 

slika03.png

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.
 

slika04.png

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

 

slika05.png

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.

Kategorija: