Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Sögulega séð eru skipanalínuforrit í Unix kerfum betur þróuð en á Windows, en með tilkomu nýrrar lausnar hefur staðan breyst.

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

PowerShell er hægt að skrifa á túlkuðu, margþættu tungumáli sem hefur þætti í klassískri málsmeðferð, hlutbundinni og jafnvel hagnýtri forritun: skilyrta greiningu, lykkjur, breytur, fylki, kjötkássatöflur, flokka, villumeðferð, auk aðgerða, cmdlets og leiðslur . Fyrri grein var helgað grunnatriðum í vinnu í umhverfinu og nú bjóðum við lesendum okkar upp á litla uppflettibók fyrir forritara.

Lýsing:

Comments
Breytur og gerðir þeirra
Kerfisbreytur
Gildissvið
Umhverfisbreytur (umhverfi)
Reikni- og samanburðartæki
Úthlutunaraðilar
Rökréttir rekstraraðilar
Skilyrt stökk
Hjólreiðar
Fylki
Hash töflur
Aðgerðir
Villa við vinnslu

Þú getur skrifað kóða í hvaða textaritli sem er eða notað samþætt þróunarumhverfi - auðveldasta leiðin er að taka Windows PowerShell ISE sem fylgir Microsoft stýrikerfum miðlara. Þetta er aðeins nauðsynlegt fyrir frekar flóknar forskriftir: stutt skipanasett er auðveldara að framkvæma gagnvirkt.

Comments

Notkun athugasemda er talin hluti af góðum forritunarstíl ásamt réttri inndrætti og hvítbili:

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

<# 

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

#>

Breytur og gerðir þeirra

Breytur í PowerShell eru nefndir hlutir. Nöfn þeirra geta innihaldið undirstrik, svo og bókstafi og tölustafi. $ táknið er alltaf notað á undan nafninu og til að lýsa yfir breytu er nóg að gefa túlknum gilt nafn:

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Til að frumstilla breytu (úthluta henni gildi) er úthlutunarriðillinn (tákn =) notaður:

$test = 100

Þú getur lýst yfir breytu með því að tilgreina tegund hennar í hornklofa (tegund steypustjórnanda) á undan nafni eða gildi:

[int]$test = 100

$test = [int]100

Það er mikilvægt að skilja að breytur í PowerShell eru fullgildir hlutir (flokkar) með eiginleika og aðferðir sem eru byggðar á þeim í .NET Core. Við teljum upp helstu:

Tegund (.NET flokkur)

Lýsing

Dæmi um kóða

[strengur] System.String

Unicode strengur 

$test = "próf"
$test = 'próf'

[char]System.Char

Unicode stafur (16 bitar)

[char]$test = 'c'

[bool] System.Boolean

boolesk tegund (boolesk satt eða ósatt)

[bool]$próf = $true

[int] System.Int32

þrjátíu og tveggja bita heiltala (32 bitar)

[int]$próf = 123456789

[langur] System.Int64

sextíu og fjögurra bita heiltala (64 bita)

[langt]$próf = 12345678910

[single] System.Single

fljótandi punktur númer 32 bitar að lengd

[eitt]$próf = 12345.6789

[tvöfaldur]System.Double

Fljótapunktsfjöldi lengdar 64 bitar (8 bæti)

[tvöfaldur]$próf = 123456789.101112

[tugastafur]System.Decimal

128-bita flotnúmer (nauðsynlegt að enda á d)

[taustafur]$próf = 12345.6789d

[DateTime]System.DateTime

dagsetning og tími 

$test = GetDate

[fylki] System.Object[]

fylki þar sem frumefnavísitalan byrjar á 0

$test_array = 1, 2, "próf", 3, 4

[hashtable] System.Collections.Hashtable

kjötkássatöflur eru tengdar fylki með nafngreindum lyklum, byggðar samkvæmt meginreglunni: @{lykill = "gildi"}

$test_hashtable = @{one="one"; two="tveir"; þrír="þrjú"}

PowerShell styður óbeina tegundabreytingu, auk þess er hægt að breyta tegund breytu á flugi (til dæmis með því að nota úthlutunarrekstraraðila), ef það er ekki tilgreint með valdi - í þessu tilfelli mun túlkurinn gefa upp villu. Þú getur ákvarðað tegund breytunnar úr fyrra dæmi með því að kalla GetType() aðferðina:

$test.GetType().FullName

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Það eru nokkrir cmdlets til að vinna með breytur. Listi þeirra á þægilegu formi er sýndur með skipuninni:

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

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Til að skoða yfirgefnar breytur og gildi þeirra geturðu notað sérstakan cmdlet:

Get-Variable | more

Þessi aðferð virðist of fyrirferðarmikil, það er miklu þægilegra að vinna með breytur í gegnum rekstraraðila eða með því að nálgast eiginleika þeirra og aðferðir beint. Hins vegar hafa cmdlets tilverurétt vegna þess að þeir leyfa þér að stilla nokkrar viðbótarfæribreytur. Það er mikilvægt að skilja að notendabreytur eru aðeins skilgreindar innan núverandi lotu. Þegar stjórnborðinu er lokað eða handritinu lýkur er þeim eytt.

Kerfisbreytur

Til viðbótar við þær sem notandinn hefur gefið upp eru innbyggðar (kerfis)breytur sem ekki er eytt eftir að núverandi lotu lýkur. Þeim er skipt í tvær tegundir en PowerShell ástandsgögn eru geymd í sjálfvirkum breytum sem ekki er hægt að úthluta handahófskenndum gildum ein og sér. Þetta felur í sér til dæmis $PWD:

$PWD.Path

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Valbreytur eru nauðsynlegar til að geyma kjörstillingar notenda, gildi þeirra er hægt að breyta. Til dæmis, með því að nota $ErrorActionPreference , er viðbrögð skipanatúlksins stillt við því að villur sem ekki eru banvænar koma upp.

Til viðbótar við rekstraraðila og cmdlets til að fá aðgang að yfirlýstum breytum, er til Variable: gervi-safn. Þú getur unnið með það á hliðstæðan hátt við önnur drif og breyturnar í þessu tilfelli líkjast skráarkerfishlutum:

Get-ChildItem Variable: | more

eða

ls Variable: | more

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Gildissvið

Fyrir breytur í PowerShell er hugtakið umfang (Scope). Aðgerð hnattræns umfangs (Global) á við alla núverandi lotu - hún inniheldur til dæmis kerfisbreytur. Staðbundnar (staðbundnar) breytur eru aðeins tiltækar á því umfangi sem þær voru skilgreindar: segjum innan falls. Það er líka hugmyndin um umfang handritsins (Script), en fyrir handritsskipanir er það í meginatriðum staðbundið. Sjálfgefið er að þegar breytur eru lýstar yfir er þeim gefið staðbundið umfang og til að breyta þessu þarftu sérstaka smíði eins og: $Global: variable = value.

Til dæmis, svona:

$Global:test = 100

Umhverfisbreytur (umhverfi)

Annað gervidrif, Env:, er fáanlegt frá PowerShell og hægt er að nota það til að fá aðgang að umhverfisbreytum. Þegar skelin byrjar eru þau afrituð úr foreldraferlinu (þ.e. úr forritinu sem hóf núverandi lotu) og venjulega eru upphafsgildin þeirra þau sömu og gildin á stjórnborðinu. Til að skoða umhverfisbreytur, notaðu Get-ChildItem cmdlet eða samnefni þess (nefnin): ls og dir.

dir Env:

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Þessar breytur eru raðir af bætum (eða stöfum, ef þú vilt), túlkun þeirra fer aðeins eftir forritinu sem notar þær. *-Variable cmdletarnir virka ekki með umhverfisbreytum. Til að fá aðgang að þeim þarftu að nota drifforskeytið:

$env:TEST = "Hello, World!"

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Reikni- og samanburðartæki

PowerShell býður upp á eftirfarandi reikniaðgerðir: + (samlagning), - (frádráttur), * (margfaldaðu), / (deilingu) og % (modulo eða modulo). Niðurstaðan úr talnatjáningu er metin frá vinstri til hægri í samræmi við almennt viðurkennda röð aðgerða og svigar eru notaðir til að flokka hluta tjáningarinnar. Bil milli rekstraraðila eru hunsuð, þau eru aðeins notuð til að auðvelda lestur. + rekstraraðilinn tengist líka saman og * rekstraraðilinn endurtekur strengi. Ef þú reynir að bæta tölu við streng verður henni breytt í streng. Að auki hefur PowerShell tungumálið marga samanburðaraðila sem athuga hvort samræmi sé á milli tveggja gilda og skila Boolean True eða False:

Flugrekandi

Lýsing

Dæmi um kóða

-jafngildi

Jafnt / Jafnt (svipað og = eða == á öðrum tungumálum)

$próf = 100
$próf -eq 123 

-Nei

Ekki jafnt / Ekki jafnt (svipað og <> eða !=)

$próf = 100
$test -ne 123   

-gt

Stærra en / meira (hliðstæða >)

$próf = 100
$próf -gt 123

-gefa

Stærri en eða jafn / Stærri en eða jafn (svipað og >=)

$próf = 100
$test -ge 123

-lt

Minna en / minna (svipað og <)

$próf = 100
$próf -lt 123  

-the

Minna en eða jafnt / Minna en eða jafnt (svipað og <=)

$próf = 100
$próf -le 123

Það eru aðrir svipaðir rekstraraðilar sem gera þér kleift, til dæmis, að bera saman strengi sem byggjast á algildisstafi eða nota reglulegar segðir til að passa við mynstur. Við munum fjalla ítarlega um þær í næstu greinum. Táknin <, > og = eru ekki notuð til samanburðar þar sem þau eru notuð í öðrum tilgangi.

Úthlutunaraðilar

Til viðbótar við algengasta = rekstraraðila, eru aðrir úthlutunaraðgerðir: +=, -=, *=, /= og %=. Þeir breyta gildinu fyrir úthlutun. Unary operators ++ og -, sem auka eða lækka gildi breytu, hegða sér svipað - þeir eiga einnig við um úthlutunarrekstraraðila.

Rökréttir rekstraraðilar

Samanburður einn er ekki nóg til að lýsa flóknum aðstæðum. Þú getur skrifað hvaða rökfræðilega orðatiltæki sem er með því að nota aðgerðirnar: -og, -eða, -xor, -ekki og! .. Þeir virka eins og í öðrum forritunarmálum, á meðan þú getur notað sviga til að tilgreina matsröðina:

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

-not (123 -gt 321) 

!(123 -gt 321)

Skilyrt stökk

Útibúar í PowerShell eru staðlaðar: IF(IF…ELSE, IF…ELSEIF…ELSE) og SWITCH. Við skulum skoða notkun þeirra með dæmum:

[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 или значение не определено"}
}

Hjólreiðar

PowerShell hefur nokkur afbrigði af lykkjum: WHILE, DO WHILE, DO UNTIL, FOR og FOREACH.

Lykka með forsendu virkar ef/svo lengi sem hún er sönn:

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

Lykkjur með postcondition munu keyra að minnsta kosti einu sinni, vegna þess að ástandið er athugað eftir endurtekninguna. Á sama tíma virkar DO WHILE á meðan skilyrðið er satt og DO TILL virkar á meðan það er rangt:

[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)

Fjöldi endurtekningar á FOR lykkjunni er þekktur fyrirfram:

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

Í FOREACH lykkjunni er endurtekið yfir þætti fylkis eða safns (kássatöflu):

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

Fylki

PowerShell breytur geyma ekki aðeins staka hluti (númer, streng, osfrv.), heldur einnig marga. Einfaldasta tegund slíkra breyta eru fylki. Fylki getur samanstaðið af nokkrum þáttum, einu staki, eða verið tómt, þ.e. innihalda engin frumefni. Það er lýst yfir með @() stjórnandanum, sem við munum þurfa í næstu grein - það er mjög mikilvægt til að bæta öðrum fylkjum við fylki (búa til fjölvíddar fylki), senda fylki til aðgerðir sem rök og svipuð verkefni:

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

Þegar fylki er frumstillt eru gildi þess skráð aðskilin með kommum (sérstakur rekstraraðili,):

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

Í flestum tilfellum er hægt að sleppa @() rekstraraðilanum:

$test_array = 1, 2, 3, 4

Í þessu tilviki er fylki eins þáttar frumstillt sem hér segir

$test_array = , 1

Fylkiseiningar eru aðgengilegar með því að nota heiltöluvísitölu sem byggir á núll og vísitöluaðgerðina (ferningahorn):

$test_array[0] = 1

Þú getur tilgreint nokkrar vísitölur aðskildar með kommum, þ.m.t. endurtekið:

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

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Flugrekandi .. (tveir punktar - svið rekstraraðili) skilar fylki heiltalna innan tilgreindra efri og neðri marka. Til dæmis gefur tjáning 1..4 út fylki með fjórum þáttum @(1, 2, 3, 4), og tjáning 8..5 gefur út fylki @(8, 7, 6, 5).

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Með því að nota range operator geturðu frumstillt fylki ($test_array = 1..4) eða fengið sneið (sneið), þ.e. röð af þáttum úr einni fylki með vísitölum frá annarri. Í þessu tilviki táknar neikvæð tala -1 síðasta þátt fylkisins, -2 - næstsíðasta, og svo framvegis.

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

Athugaðu að heiltölufylkisgildi geta verið hærri en hámarksvísitölugildi gagnafylkisins. Í þessu tilviki er öllum gildum skilað upp í það síðasta:

$test_array[0..100]

Ef þú reynir að fá aðgang að einum flokki sem ekki er til, þá er $null skilað.

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Í PowerShell geta fylki innihaldið þætti af mismunandi gerðum eða verið mjög slegið:

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

Þar sem eignin $test_array.count er fjöldi fylkisþátta.

Dæmi um að búa til sterkt innritað fylki:

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

Hash töflur

Önnur grunntegund af breytum í PowerShell tungumálinu eru kjötkássatöflur, einnig þekktar sem tengdar fylki. Hasttöflur eru svipaðar JSON hlutum og eru byggðar á lykilgildi. Ólíkt venjulegum fylkjum er hægt að nálgast þætti þeirra með nafngreindum lyklum, sem eru eiginleikar hlutarins (þú getur líka notað vísitöluaðgerðina - hornklofa).

Tóm kjötkássatafla er lýst yfir með @-tákninu og stjórnandasvigum:

$test_hashtable = @{}

Þegar þú lýsir yfir geturðu strax búið til lykla og úthlutað þeim gildum:

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

Til að bæta staki við kjötkássatöflu, verður þú að tengja lykil sem er ekki enn til við hana, eða nota Add () aðferðina. Ef úthlutun er á núverandi lykil breytist gildi hans. Aðferðin Remove() er notuð til að fjarlægja frumefni úr kjötkássatöflu.

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

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Hægt er að senda breytur af þessari gerð sem rök fyrir föll og cmdlet - í næstu grein munum við kanna hvernig þetta er gert og einnig íhuga aðra svipaða tegund - PSCustomObject.

Aðgerðir

PowerShell hefur allt sem þú þarft fyrir verklagsforritun, þar á meðal aðgerðir. Til að lýsa þeim er fallorðið Function notað, eftir það þarf að tilgreina heiti fallsins og meginmálið innan sviga. Ef þú þarft að senda rök til fallsins geturðu tilgreint þær strax á eftir nafninu innan sviga.

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

Fallið skilar alltaf niðurstöðu - það er fylki af niðurstöðum allra fullyrðinga þess, ef þær eru fleiri en ein. Ef það er aðeins ein fullyrðing er eina gildi samsvarandi tegundar skilað. Skilagerðin $value bætir staki með gildinu $value við niðurstöðufylkina og stöðvar framkvæmd yfirlýsingalistans og tóma fallið skilar $null.

Við skulum til dæmis búa til fall til að setja tölu í veldi:

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

Athugaðu að í meginmáli falls geturðu notað hvaða breytur sem lýst er yfir áður en þú hringir í það og að kalla aðgerðir í PowerShell gætu virst óvenjulegar: rökin (ef einhver eru) eru ekki innan sviga og eru aðskilin með bilum.

sqr 2

eða svona:

sqr -number 2

Vegna þess hvernig rök eru send þarf aðgerðin sjálf stundum að vera innan sviga:

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

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Þegar þú lýsir falli geturðu úthlutað sjálfgefnum gildum til viðfangsefna:

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

Það er önnur setningafræði til að lýsa fallrökum, auk þess er hægt að lesa færibreytur úr leiðslunni - allt þetta mun koma sér vel í næstu grein, þegar við skoðum útfluttar einingar og búum til okkar eigin cmdlets.

Villa við vinnslu

PowerShell er með Try...Catch...Loksins kerfi til að meðhöndla undantekningar. Reyndu kubburinn inniheldur kóðann þar sem villa getur átt sér stað og Catch blokkin inniheldur meðhöndlun þess. Ef það var engin villa er hún ekki keyrð. Lokablokkin er keyrð á eftir Reyndu kubbnum, óháð því hvort villa hefur komið upp, og það geta verið nokkrir aflablokkir fyrir mismunandi tegundir undantekninga. Undantekningin sjálf er skrifuð á ótilgreinda sjálfgefna breytu ($_) og hægt er að sækja hana auðveldlega. Í dæminu hér að neðan innleiðum við vernd gegn því að slá inn ógilt gildi:

try {

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

} catch {

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

}

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Þetta lýkur yfirferð yfir grunnatriði forritunar á PowerShell tungumálinu. Í eftirfarandi greinum munum við læra nánar um að vinna með breytur af mismunandi gerðum, söfnum, reglulegum tjáningum, búa til aðgerðir, einingar og sérsniðna cmdlet, auk hlutbundinnar forritunar.

Hvað er Windows PowerShell og með hverju er það borðað? 2. hluti: Inngangur að forritunarmálinu

Heimild: www.habr.com

Bæta við athugasemd