Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Istoriškai Unix sistemose komandinės eilutės paslaugos buvo geriau išvystytos nei Windows, tačiau atsiradus naujam sprendimui padėtis pasikeitė.

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

„PowerShell“ scenarijus gali būti surašytas interpretuojama, kelių paradigmų kalba, kurioje yra klasikinio procedūrinio, į objektą orientuoto ir net funkcinio programavimo elementų: sąlyginis išsišakojimas, kilpos, kintamieji, masyvai, maišos lentelės, klasės, klaidų apdorojimas, taip pat funkcijos, cmdlet ir vamzdynai . Ankstesnis straipsnis buvo skirta darbo aplinkoje pagrindams, o dabar savo skaitytojams siūlome nedidelę žinyną programuotojams.

Turinys:

komentarai
Kintamieji ir jų tipai
Sistemos kintamieji
Taikymo sritis
Aplinkos kintamieji (aplinka)
Aritmetiniai ir palyginimo operatoriai
Priskyrimo operatoriai
Loginiai operatoriai
Sąlyginis šuolis
Dviračiai
Lėkštės
Maišos lentelės
Funkcijos
Apdorojant įvyko klaida

Kodą galite rašyti naudodami bet kurį teksto rengyklę arba naudodami integruotą kūrimo aplinką – paprasčiausias būdas yra naudoti Windows PowerShell ISE, kuri pateikiama kartu su Microsoft serverių operacinėmis sistemomis. Tai būtina tik gana sudėtingiems scenarijams: trumpus komandų rinkinius lengviau vykdyti interaktyviai.

komentarai

Komentarų naudojimas kartu su tinkama įtrauka ir tarpais laikomas gero programavimo stiliaus dalimi:

# Для строчных комментариев используется символ решетки — содержимое строки интерпретатор не обрабатывает.

<# 

       Так обозначаются начало и конец блочного комментария. 
       Заключенный между ними текст интерпретатор игнорирует.

#>

Kintamieji ir jų tipai

„PowerShell“ kintamieji yra pavadinti objektai. Jų pavadinimuose gali būti pabraukimo simbolio, taip pat raidžių ir skaičių. Simbolis $ visada naudojamas prieš pavadinimą, o norint deklaruoti kintamąjį, pakanka pateikti interpretatoriui tinkamą pavadinimą:

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Norėdami inicijuoti kintamąjį (priskirti jam reikšmę), naudojamas priskyrimo operatorius (simbolis =):

$test = 100

Kintamąjį galite deklaruoti, prieš pavadinimą arba reikšmę nurodydami jo tipą laužtiniuose skliaustuose (tipo liejimo operatorius):

[int]$test = 100

$test = [int]100

Svarbu suprasti, kad „PowerShell“ kintamieji yra visaverčiai objektai (klasės) su savybėmis ir metodais, kurių tipai pagrįsti .NET Core esančiais. Mes išvardijame pagrindinius:

Tipas (.NET klasė)

aprašymas

Kodo pavyzdys

[string] System.String

Unikodo eilutė 

$test = "bandymas"
$test = 'bandymas'

[char]Sistema.Char

Unikodo simbolis (16 bitų)

[char]$test = 'c'

[bool] System.Boolean

loginis tipas (loginis teisingas arba klaidingas)

[bool]$test = $true

[int] Sistema.Int32

trisdešimt dviejų bitų sveikasis skaičius (32 bitai)

[int]$test = 123456789

[ilgas] System.Int64

šešiasdešimt keturių bitų sveikasis skaičius (64 bitai)

[ilgas]$testas = 12345678910

[single] System.Single

32 bitų ilgio slankiojo kablelio skaičius

[single]$test = 12345.6789

[double]Sistema.Dvigubas

slankiojo kablelio skaičius, kurio ilgis 64 bitai (8 baitai)

[double]$test = 123456789.101112

[dešimtainė]Sistema.Dešimtainė

128 bitų slankiojo kablelio skaičius (būtina baigtis raide d)

[dešimtainis]$testas = 12345.6789d

[DateTime]System.DateTime

data ir laikas 

$test = GetDate

[masyvas] Sistema.Objektas[]

masyvas, kurio elementų indeksas prasideda nuo 0

$test_masyvas = 1, 2, "testas", 3, 4

[hashtable] System.Collections.Hashtable

maišos lentelės yra asociatyvūs masyvai su pavadintais raktais, sudaryti pagal principą: @{key = "value"}

$test_hashtable = @{one="vienas"; du = "du"; trys = "trys"}

„PowerShell“ palaiko numanomą tipo konvertavimą, be to, kintamojo tipą galima pakeisti skrydžio metu (pavyzdžiui, naudojant priskyrimo operatorių), jei jis nenurodytas priverstinai – tokiu atveju interpretatorius duos klaidą. Kintamojo tipą galite nustatyti iš ankstesnio pavyzdžio, iškviesdami GetType() metodą:

$test.GetType().FullName

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Yra keletas cmdlet, skirtų valdyti kintamuosius. Jų sąrašas patogia forma rodomas naudojant komandą:

Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Norėdami peržiūrėti deklaruotus kintamuosius ir jų reikšmes, galite naudoti specialią cmdlet:

Get-Variable | more

Šis metodas atrodo pernelyg sudėtingas, daug patogiau dirbti su kintamaisiais per operatorius arba tiesiogiai pasiekiant jų savybes ir metodus. Tačiau cmdlet turi teisę egzistuoti, nes leidžia nustatyti kai kuriuos papildomus parametrus. Svarbu suprasti, kad vartotojo kintamieji apibrėžiami tik dabartinės sesijos metu. Kai konsolė uždaroma arba scenarijus baigiasi, jie ištrinami.

Sistemos kintamieji

Be tų, kuriuos deklaravo vartotojas, yra integruotų (sistemos) kintamųjų, kurie neištrinami pasibaigus dabartinei sesijai. Jie skirstomi į du tipus, o „PowerShell“ būsenos duomenys saugomi automatiniuose kintamuosiuose, kuriems negalima priskirti savavališkų reikšmių. Tai apima, pavyzdžiui, $ PWD:

$PWD.Path

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Parinkčių kintamieji reikalingi vartotojo nuostatoms išsaugoti, kurių reikšmes galima keisti. Pavyzdžiui, naudojant $ErrorActionPreference, nustatoma komandų interpretatoriaus reakcija į nelemtingų klaidų atsiradimą.

Be operatorių ir cmdlet, skirtų pasiekti deklaruotus kintamuosius, yra kintamasis: pseudoakumuliatorius. Galite dirbti su juo pagal analogiją su kitais diskais, o kintamieji šiuo atveju primena failų sistemos objektus:

Get-ChildItem Variable: | more

arba

ls Variable: | more

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Taikymo sritis

„PowerShell“ kintamiesiems yra apimties (apimties) sąvoka. Visuotinės apimties (Global) veiksmas taikomas visai dabartinei sesijai – jis apima, pavyzdžiui, sistemos kintamuosius. Vietiniai (vietiniai) kintamieji galimi tik toje srityje, kurioje jie buvo apibrėžti: tarkime, funkcijos viduje. Taip pat yra scenarijaus (Script) apimties sąvoka, tačiau scenarijaus komandoms ji iš esmės yra lokali. Pagal numatytuosius nustatymus deklaruojant kintamuosius jiems suteikiama lokali apimtis, o norint tai pakeisti, reikia specialios konstrukcijos, tokios kaip: $Global: kintamasis = reikšmė.

Pavyzdžiui, taip:

$Global:test = 100

Aplinkos kintamieji (aplinka)

Kitas pseudo diskas, Env:, yra pasiekiamas iš PowerShell ir gali būti naudojamas aplinkos kintamiesiems pasiekti. Kai apvalkalas paleidžiamas, jie nukopijuojami iš pirminio proceso (ty iš programos, kuri inicijavo dabartinį seansą) ir paprastai jų pradinės reikšmės yra tokios pat kaip valdymo skydelio reikšmės. Norėdami peržiūrėti aplinkos kintamuosius, naudokite Get-ChildItem cmdlet arba jos slapyvardžius (slapyvardžius): ls ir dir.

dir Env:

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Šie kintamieji yra baitų (arba simbolių, jei norite) sekos, kurių interpretacija priklauso tik nuo juos naudojančios programos. *-Variable cmdlet neveikia su aplinkos kintamaisiais. Norėdami juos pasiekti, turite naudoti disko priešdėlį:

$env:TEST = "Hello, World!"

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Aritmetiniai ir palyginimo operatoriai

„PowerShell“ pateikia šiuos aritmetinius operatorius: + (sudėtis), - (atimtis), * (daugyba), / (dalyba) ir % (modulo arba modulo). Aritmetinės išraiškos rezultatas vertinamas iš kairės į dešinę pagal visuotinai priimtą operacijų tvarką, o reiškinio dalims sugrupuoti naudojami skliaustai. Tarpai tarp operatorių ignoruojami, jie naudojami tik tam, kad būtų lengviau skaityti. + operatorius taip pat jungiasi, o operatorius * kartoja eilutes. Jei bandysite pridėti skaičių prie eilutės, ji bus konvertuojama į eilutę. Be to, „PowerShell“ kalboje yra daug palyginimo operatorių, kurie patikrina, ar dvi reikšmės atitinka, ir pateikia loginį teisingą arba klaidingą:

Operatorius

aprašymas

Kodo pavyzdys

-ekv

Lygus / Lygus (panašus į = arba == kitomis kalbomis)

$ testas = 100
$test -eq 123 

- gimęs

Nelygus / Nelygus (panašus į <> arba !=)

$ testas = 100
$test -ne 123   

-gt

Didesnis nei / Daugiau (analoginis >)

$ testas = 100
$test -gt 123

-amžius

Didesnis nei arba lygus / Didesnis nei arba lygus (panašus į >=)

$ testas = 100
$test -ge 123

-lt

Mažiau nei / Mažiau (panašus į <)

$ testas = 100
$testas -lt 123  

-jie

Mažiau nei arba lygus / Mažiau nei arba lygus (panašus į <=)

$ testas = 100
$ testas -le 123

Yra ir kitų panašių operatorių, kurie leidžia, pavyzdžiui, palyginti eilutes pagal pakaitos simbolį arba naudoti įprastus posakius, kad atitiktų šabloną. Mes juos išsamiai aptarsime būsimuose straipsniuose. Simboliai <, > ir = nenaudojami palyginimui, nes naudojami kitiems tikslams.

Priskyrimo operatoriai

Be labiausiai paplitusio = operatoriaus, yra ir kitų priskyrimo operatorių: +=, -=, *=, /= ir %=. Jie pakeičia vertę prieš priskyrimą. Vienarūšiai operatoriai ++ ir -, kurie padidina arba mažina kintamojo reikšmę, elgiasi panašiai – jie taip pat taikomi priskyrimo operatoriams.

Loginiai operatoriai

Vien palyginimo nepakanka sudėtingoms sąlygoms apibūdinti. Galite rašyti bet kokias logines išraiškas naudodami operatorius: -ir, -or, -xor, -not and! .. Jie veikia kaip ir kitose programavimo kalbose, o skliausteliuose galite nurodyti vertinimo tvarką:

("Тест" -eq "Тест") -and (100 -eq 100)

-not (123 -gt 321) 

!(123 -gt 321)

Sąlyginis šuolis

„PowerShell“ šakų operatoriai yra standartiniai: IF(IF…ELSE, IF…ELSEIF…ELSE) ir SWITCH. Pažvelkime į jų naudojimą su pavyzdžiais:

[int]$test = 100
if ($test -eq 100) {
      Write-Host "test = 100"
}



[int]$test = 50
if ($test -eq 100) {
       Write-Host "test = 100"
}
else {
      Write-Host "test <> 100"
}



[int]$test = 10
if ($test -eq 100) {
      Write-Host "test = 100"
}
elseif ($test -gt 100) {
      Write-Host "test > 100"
}
else {
       Write-Host "test < 100"
}



[int]$test = 5
switch ($test) {
     0 {Write-Host "test = 0"}
     1 {Write-Host "test = 1"}
     2 {Write-Host "test = 2"}
     3 {Write-Host "test = 3"}
     4 {Write-Host "test = 4"}
     5 {Write-Host "test = 5"}
     default {Write-Host "test > 5 или значение не определено"}
}

Dviračiai

„PowerShell“ turi keletą tipų kilpų: WHILE, DO WHILE, DO UNTIL, FOR ir FOREACH.

Kilpa su išankstine sąlyga veikia, jei / tol, kol ji yra teisinga:

[int]$test = 0
while ($test -lt 10) {
      Write-Host $test
      $test = $test + 1
}

Kilpos su post-sąlyga veiks bent kartą, nes sąlyga patikrinama po iteracijos. Tuo pačiu metu DO WHILE veikia, kai sąlyga teisinga, ir DO UNTIL veikia, kai ji klaidinga:

[int]$test = 0
do {
      Write-Host $test
      $test = $test + 1 
}
while ($test -lt 10)



[int]$test = 0
do {
      Write-Host $test
      $test = $test + 1 
}
until ($test -gt 9)

FOR ciklo iteracijų skaičius yra žinomas iš anksto:

for ([int]$test = 0; $test -lt 10; $test++) {
       Write-Host $test
}

FOREACH cikle kartojasi per masyvo arba rinkinio elementus (maišos lentelė):

$test_collection = "item1", "item2", "item3"
foreach ($item in $test_collection)
{
        Write-Host $item
}

Lėkštės

PowerShell kintamieji saugo ne tik pavienius objektus (skaičius, eilutes ir kt.), bet ir kelis. Paprasčiausias tokių kintamųjų tipas yra masyvai. Masyvas gali susidėti iš kelių elementų, vieno elemento arba būti tuščias, t.y. neturi jokių elementų. Jis deklaruojamas naudojant @() operatorių, kurio mums prireiks kitame straipsnyje – tai labai svarbu į masyvą įtraukiant kitus masyvus (kuriant daugiamačius masyvus), perduodant masyvus funkcijoms kaip argumentą ir panašioms užduotims:

$test_array = @() #создаем пустой массив

Kai masyvas inicijuojamas, jo reikšmės pateikiamos atskiriant kableliais (specialus operatorius ,):

$test_array = @(1, 2, 3, 4) # создаем массив из четырех элементов 

Daugeliu atvejų @() operatorius gali būti praleistas:

$test_array = 1, 2, 3, 4

Šiuo atveju vieno elemento masyvas inicijuojamas taip

$test_array = , 1

Masyvo elementai pasiekiami naudojant nulinio sveikojo skaičiaus indeksą ir indekso operatorių (laužtiniuose skliaustuose):

$test_array[0] = 1

Galite nurodyti kelis indeksus, atskirtus kableliais, įskaitant. pasikartojantis:

$test_array = "один", "два", "три", "четыре"
$test_array[0,1,2,3]
$test_array[1,1,3,3,0]

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Operatorius .. (du taškai – diapazono operatorius) pateikia sveikųjų skaičių masyvą nurodytose viršutinėse ir apatinėse ribose. Pavyzdžiui, reiškinys 1..4 išveda keturių elementų masyvą @(1, 2, 3, 4), o reiškinys 8..5 – masyvą @(8, 7, 6, 5).

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Naudodami diapazono operatorių galite inicijuoti masyvą ($test_array = 1..4) arba gauti pjūvį (slice), t.y. elementų seka iš vieno masyvo su indeksais iš kito. Šiuo atveju neigiamas skaičius -1 žymi paskutinį masyvo elementą, -2 - priešpaskutinį ir pan.

$test_array = "один", "два", "три", "четыре"
$test_array[0..2]
$test_array[2..0]
$test_array[-1..0]
$test_array[-2..1]

Atminkite, kad sveikųjų skaičių masyvo reikšmės gali būti didesnės nei didžiausia duomenų masyvo indekso reikšmė. Šiuo atveju visos reikšmės grąžinamos iki paskutinės:

$test_array[0..100]

Jei bandote pasiekti vieną neegzistuojantį masyvo elementą, grąžinamas $null.

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

„PowerShell“ masyvuose gali būti įvairių tipų elementų arba jie gali būti griežtai įvesti:

$test_array = 1, 2, "тест", 3, 4
for ([int]$i = 0; $i -lt $test_array.count; $i++)
{
          Write-Host $test_array[$i]
}

Kur $test_array.count savybė yra masyvo elementų skaičius.

Stipriai įvesto masyvo kūrimo pavyzdys:

[int[]]$test_array = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Maišos lentelės

Kitas pagrindinis „PowerShell“ kalbos kintamųjų tipas yra maišos lentelės, dar vadinamos asociatyviniais masyvais. Hashtables yra panašios į JSON objektus ir yra sukurtos rakto vertės pagrindu. Skirtingai nuo įprastų masyvų, jų elementai pasiekiami vardiniais raktais, kurie yra objekto savybės (taip pat galite naudoti indekso operatorių – laužtinius skliaustus).

Tuščia maišos lentelė deklaruojama naudojant @ simbolį ir operatorių skliaustus:

$test_hashtable = @{}

Deklaruodami galite iš karto sukurti raktus ir priskirti jiems reikšmes:

$test_hashtable = @{one="один"; two="два"; three="три"; "some key"="some value"}

Norėdami įtraukti elementą į maišos lentelę, turite jai priskirti raktą, kurio dar nėra, arba naudoti metodą Add () . Jei priskyrimas atliekamas esamam raktui, jo reikšmė pasikeis. Pašalinti() metodas naudojamas elementui pašalinti iš maišos lentelės.

$test_hashtable."some key"
$test_hashtable["some key"]
$test_hashtable.Add("four", "четыре")
$test_hashtable.five = "пять"
$test_hashtable['five'] = "заменяем значение"
$test_hashtable.Remove("one")

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Šio tipo kintamieji gali būti perduodami kaip argumentai funkcijoms ir cmdlet - kitame straipsnyje mes išnagrinėsime, kaip tai daroma, taip pat apsvarstysime kitą panašų tipą - PSCustomObject.

Funkcijos

„PowerShell“ turi viską, ko reikia procedūriniam programavimui, įskaitant funkcijas. Jiems apibūdinti naudojamas funkcinis žodis Funkcija, po kurio reikia nurodyti funkcijos pavadinimą ir korpusą, esantį operatorių skliausteliuose. Jei funkcijai reikia perduoti argumentus, galite juos nurodyti iškart po pavadinimo skliausteliuose.

function имя-функции (аргумент1, ..., аргументN) 
{ 
        тело-функции 
} 

Funkcija visada grąžina rezultatą – tai visų jos teiginių rezultatų masyvas, jei jų yra daugiau nei vienas. Jei yra tik vienas sakinys, grąžinama vienintelė atitinkamo tipo reikšmė. Grąžinama $value konstrukcija prideda elementą su reikšme $value prie rezultatų masyvo ir nutraukia teiginių sąrašo vykdymą, o tuščia funkcija grąžina $null.

Pavyzdžiui, sukurkime funkciją, skirtą skaičiaus kvadratui:

function sqr ($number)
{
      return $number * $number
}

Atminkite, kad funkcijos turinyje galite naudoti bet kokius kintamuosius, deklaruotus prieš ją iškviečiant, o funkcijų iškvietimas PowerShell gali atrodyti neįprastas: argumentai (jei yra) nėra skliausteliuose ir yra atskirti tarpais.

sqr 2

ar taip:

sqr -number 2

Dėl argumentų perdavimo būdo pati funkcija kartais turi būti pateikta skliausteliuose:

function test_func ($n) {}
test_func -eq $null     # функция не вызывалась
(test_func) -eq $null   # результат выражения — $true

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Apibūdindami funkciją, argumentams galite priskirti numatytąsias reikšmes:

function func ($arg = value) {
         #тело функции
}

Funkcijų argumentams aprašyti yra ir kita sintaksė, be to, parametrus galima nuskaityti iš konvejerio – visa tai pravers kitame straipsnyje, kai pažvelgsime į eksportuotus modulius ir kursime savo cmdlet.

Apdorojant įvyko klaida

„PowerShell“ turi „Try...Catch...“ pagaliau mechanizmą, skirtą išimtims tvarkyti. Bloke Try yra kodas, kuriame gali įvykti klaida, o bloke Catch yra jo tvarkytoja. Jei klaidos nebuvo, ji nevykdoma. Blokas „Galiausiai“ vykdomas po „Try“ bloko, neatsižvelgiant į klaidos atsiradimą, ir gali būti keli „Catch“ blokai, skirti įvairių tipų išimtims. Pati išimtis įrašoma į nedeklaruotą numatytąjį kintamąjį ($_) ir gali būti lengvai nuskaitoma. Toliau pateiktame pavyzdyje įdiegiame apsaugą nuo neteisingos vertės įvedimo:

try {

        [int]$test = Read-Host "Введите число"
        100 / $test

} catch {

         Write-Warning "Некорректное число"
         Write-Host $_

}

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Taip baigiama programavimo PowerShell kalba pagrindų apžvalga. Tolesniuose straipsniuose mes išsamiau išnagrinėsime darbą su įvairių tipų kintamaisiais, rinkiniais, reguliariosiomis išraiškomis, funkcijų, modulių ir pasirinktinių cmdlet kūrimu, taip pat objektiniu programavimu.

Kas yra „Windows PowerShell“ ir su kuo ji valgoma? 2 dalis: Įvadas į programavimo kalbą

Šaltinis: www.habr.com

Добавить комментарий