Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Histories is opdragreëlhulpmiddels op Unix-stelsels beter ontwikkel as op Windows, maar met die koms van 'n nuwe oplossing het die situasie verander.

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

PowerShell kan geskryf word in 'n geïnterpreteerde, multi-paradigma taal wat elemente van klassieke prosedurele, objekgeoriënteerde en selfs funksionele programmering het: voorwaardelike vertakking, lusse, veranderlikes, skikkings, hash-tabelle, klasse, fouthantering, sowel as funksies, cmdlets en pyplyne . Vorige artikel was gewy aan die basiese beginsels van werk in die omgewing, en nou bied ons ons lesers 'n klein naslaanboek vir programmeerders.

INHOUDSOPGAWE:

Comments
Veranderlikes en hul tipes
Stelsel veranderlikes
Bestekke
Omgewingsveranderlikes (omgewing)
Rekenkundige en vergelykingsoperateurs
Opdrag operateurs
Logiese operateurs
Voorwaardelike sprong
siklusse
skikkings
Hash-tabelle
Funksies
Kon nie verwerk nie

Jy kan kode in enige teksredigeerder skryf of 'n geïntegreerde ontwikkelingsomgewing gebruik - die maklikste manier is om die Windows PowerShell ISE te neem wat saam met Microsoft-bedienerbedryfstelsels kom. Dit is slegs nodig vir redelik komplekse skrifte: kort stelle opdragte is makliker om interaktief uit te voer.

Comments

Die gebruik van opmerkings word beskou as deel van goeie programmeringstyl saam met behoorlike inkeping en witspasie:

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

<# 

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

#>

Veranderlikes en hul tipes

Veranderlikes in PowerShell is benoemde voorwerpe. Hul name kan die onderstreepkarakter insluit, sowel as letters en syfers. Die $-simbool word altyd voor die naam gebruik, en om 'n veranderlike te verklaar, is dit genoeg om die tolk 'n geldige naam te gee:

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Om 'n veranderlike te inisialiseer (ken 'n waarde daaraan toe), word die toewysingsoperateur (simbool =) gebruik:

$test = 100

Jy kan 'n veranderlike verklaar deur sy tipe tussen vierkantige hakies (tipe gietoperateur) voor die naam of waarde te spesifiseer:

[int]$test = 100

$test = [int]100

Dit is belangrik om te verstaan ​​dat veranderlikes in PowerShell volwaardige voorwerpe (klasse) is met eienskappe en metodes waarvan die tipes gebaseer is op dié in .NET Core. Ons lys die belangrikste:

Tik (.NET-klas)

Beskrywing

Kode voorbeeld

[string] System.String

Unicode-string 

$toets = "toets"
$toets = 'toets'

[char]System.Char

Unicode-karakter (16 bisse)

[char]$test = 'c'

[bool] System.Boolean

Boolese tipe (Boolean Waar of Onwaar)

[bool]$toets = $waar

[int] System.Int32

twee en dertig bis heelgetal (32 bisse)

[int]$toets = 123456789

[lang] System.Int64

vier-en-sestig-bis heelgetal (64 bisse)

[lang]$toets = 12345678910

[enkel] Stelsel.Enkel

drywende punt nommer 32 bisse lank

[enkel]$toets = 12345.6789

[dubbel]Stelsel.Dubbel

swewende punt aantal lengte 64 bisse (8 grepe)

[dubbel]$toets = 123456789.101112

[desimale]Stelsel.Desimaal

128-bis swaaipuntnommer (vereis om met d te eindig)

[desimale]$toets = 12345.6789d

[DatumTime]System.DateTime

datum en tyd 

$toets = GetDate

[skikking] System.Object[]

'n skikking waarvan die element-indeks by 0 begin

$test_array = 1, 2, "toets", 3, 4

[hashtable] System.Collections.Hashtable

hash-tabelle is assosiatiewe skikkings met benoemde sleutels, gebou volgens die beginsel: @{key = "value"}

$test_hashtable = @{one="one"; twee="twee"; drie="drie"}

PowerShell ondersteun implisiete tipe omskakeling, daarbenewens kan die tipe van 'n veranderlike vinnig verander word (byvoorbeeld deur 'n opdragoperateur te gebruik), as dit nie met geweld gespesifiseer word nie - in hierdie geval sal die tolk 'n fout gee. U kan die tipe veranderlike uit die vorige voorbeeld bepaal deur die GetType() metode te noem:

$test.GetType().FullName

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Daar is 'n aantal cmdlets om veranderlikes te manipuleer. Hul lys in 'n gerieflike vorm word vertoon met die opdrag:

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

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Om verklaarde veranderlikes en hul waardes te sien, kan jy 'n spesiale cmdlet gebruik:

Get-Variable | more

Hierdie metode lyk te omslagtig, dit is baie geriefliker om met veranderlikes deur operateurs te werk of deur direk toegang tot hul eienskappe en metodes te verkry. Cmdlets het egter 'n bestaansreg omdat hulle jou toelaat om 'n paar bykomende parameters in te stel. Dit is belangrik om te verstaan ​​dat gebruikersveranderlikes slegs binne die huidige sessie gedefinieer word. Wanneer die konsole gesluit is of die skrif eindig, word dit uitgevee.

Stelsel veranderlikes

Benewens dié wat deur die gebruiker verklaar is, is daar ingeboude (stelsel) veranderlikes wat nie uitgevee word nadat die huidige sessie beëindig is nie. Hulle word in twee tipes verdeel, terwyl PowerShell-toestanddata gestoor word in outomatiese veranderlikes wat nie op hul eie arbitrêre waardes toegeken kan word nie. Dit sluit byvoorbeeld $PWD in:

$PWD.Path

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Voorkeurveranderlikes is nodig om gebruikersvoorkeure te stoor, waarvan die waardes verander kan word. Byvoorbeeld, deur $ErrorActionPreference te gebruik, word die reaksie van die opdragtolk op die voorkoms van nie-noodlottige foute gestel.

Benewens operateurs en cmdlets vir toegang tot verklaarde veranderlikes, is daar 'n Veranderlike: pseudo-akkumulator. U kan daarmee werk in analogie met ander aandrywers, en die veranderlikes in hierdie geval lyk soos lêerstelselvoorwerpe:

Get-ChildItem Variable: | more

of

ls Variable: | more

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Bestekke

Vir veranderlikes in PowerShell is daar die konsep van omvang (Scope). Die aksie van die globale omvang (Globaal) is van toepassing op die hele huidige sessie - dit sluit byvoorbeeld stelselveranderlikes in. Plaaslike (Plaaslike) veranderlikes is slegs beskikbaar in die omvang waar hulle gedefinieer is: sê binne 'n funksie. Daar is ook die konsep van die omvang van die skrif (Skrip), maar vir skrifopdragte is dit in wese plaaslik. By verstek, wanneer veranderlikes verklaar word, word hulle 'n plaaslike omvang gegee, en om dit te verander, benodig jy 'n spesiale konstruk soos: $Global: veranderlike = waarde.

Byvoorbeeld, soos volg:

$Global:test = 100

Omgewingsveranderlikes (omgewing)

Nog 'n pseudo-aandrywing, Env:, is beskikbaar vanaf PowerShell en kan gebruik word om toegang tot omgewingsveranderlikes te verkry. Wanneer die dop begin, word dit vanaf die ouerproses gekopieer (dit wil sê van die program wat die huidige sessie begin het) en gewoonlik is hul aanvanklike waardes dieselfde as die waardes in die beheerpaneel. Om omgewingsveranderlikes te sien, gebruik die Get-ChildItem cmdlet of sy aliasse (aliasse): ls en dir.

dir Env:

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Hierdie veranderlikes is reekse van grepe (of karakters, as jy wil), waarvan die interpretasie slegs afhang van die program wat hulle gebruik. Die *-Variable cmdlets werk nie met omgewingsveranderlikes nie. Om toegang tot hulle te verkry, moet jy die dryfvoorvoegsel gebruik:

$env:TEST = "Hello, World!"

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Rekenkundige en vergelykingsoperateurs

PowerShell verskaf die volgende rekenkundige operateurs: + (optelling), - (aftrekking), * (vermenigvuldig), / (deling) en % (modulo of modulo). Die resultaat van 'n rekenkundige uitdrukking word van links na regs geëvalueer in ooreenstemming met die algemeen aanvaarde volgorde van bewerkings, en hakies word gebruik om dele van die uitdrukking te groepeer. Spasies tussen operateurs word geïgnoreer, dit word slegs gebruik om dit makliker te maak om te lees. Die + operateur voeg ook saam, en die * operateur herhaal stringe. As jy probeer om 'n nommer by 'n string te voeg, sal dit na 'n string omgeskakel word. Boonop het die PowerShell-taal baie vergelykingsoperateurs wat kyk vir 'n ooreenkoms tussen twee waardes en die Boolese Waar of Onwaar gee:

Operator

Beskrywing

Kode voorbeeld

-vgl

Gelyk / Gelyk (soortgelyk aan = of == in ander tale)

$toets = 100
$toets -eq 123 

-nee

Nie gelyk nie / Nie gelyk nie (soortgelyk aan <> of !=)

$toets = 100
$toets -ne 123   

-gt

Groter as / Meer (analoog>)

$toets = 100
$toets -gt 123

-ge

Groter as of gelyk / Groter as of gelyk (soortgelyk aan >=)

$toets = 100
$toets -ge 123

-lt

Minder as / Minder (soortgelyk aan <)

$toets = 100
$toets -lt 123  

-die

Minder as of gelyk / Minder as of gelyk (soortgelyk aan <=)

$toets = 100
$toets -le 123

Daar is ander soortgelyke operateurs wat jou toelaat om byvoorbeeld stringe op grond van 'n jokerteken te vergelyk of gereelde uitdrukkings te gebruik om 'n patroon te pas. Ons sal hulle in detail in toekomstige artikels behandel. Die simbole <, > en = word nie vir vergelyking gebruik nie, want dit word vir ander doeleindes gebruik.

Opdrag operateurs

Benewens die mees algemene =-operateur, is daar ander opdragoperateurs: +=, -=, *=, /= en %=. Hulle verander die waarde voor opdrag. Die unêre operateurs ++ en -, wat die waarde van 'n veranderlike verhoog of verlaag, tree soortgelyk op - hulle is ook van toepassing op toewysingsoperateurs.

Logiese operateurs

Vergelyking alleen is nie genoeg om komplekse toestande te beskryf nie. Jy kan enige logiese uitdrukkings skryf deur die operateurs te gebruik: -en, -of, -xor, -nie en! .. Hulle werk soos in ander programmeertale, terwyl jy hakies kan gebruik om die volgorde van evaluering te spesifiseer:

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

-not (123 -gt 321) 

!(123 -gt 321)

Voorwaardelike sprong

Takoperateurs in PowerShell is standaard: IF(IF...ELSE, IF...ELSEIF...ELSE) en SWITCH. Kom ons kyk na hul gebruik met voorbeelde:

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

siklusse

PowerShell het verskeie variëteite van lusse: WHILE, DO WHILE, DOEN TOT, VIR en FOREACH.

'n Lus met 'n voorvereiste werk as/solank dit waar is:

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

Lusse met 'n postkondisie sal ten minste een keer loop, want die toestand word na die iterasie nagegaan. Terselfdertyd, DOEN WHILE werk terwyl die toestand waar is, en DOEN TOT werk terwyl dit onwaar is:

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

Die aantal iterasies van die FOR-lus is vooraf bekend:

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

In die FOREACH-lus, itereer oor die elemente van 'n skikking of versameling (hash-tabel):

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

skikkings

PowerShell-veranderlikes stoor nie net enkele voorwerpe (getal, string, ens.), maar ook veelvuldiges. Die eenvoudigste soort van sulke veranderlikes is skikkings. 'n Skikking kan bestaan ​​uit verskeie elemente, een element, of leeg wees, m.a.w. bevat geen elemente nie. Dit word verklaar deur die @()-operateur te gebruik, wat ons in die volgende artikel sal benodig - dit is baie belangrik om ander skikkings by 'n skikking te voeg (skep multidimensionele skikkings), om skikkings na funksies as 'n argument deur te gee, en soortgelyke take:

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

Wanneer 'n skikking geïnisialiseer word, word sy waardes gelys geskei deur kommas (spesiale operateur ,):

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

In die meeste gevalle kan die @() operateur weggelaat word:

$test_array = 1, 2, 3, 4

In hierdie geval word 'n skikking van een element soos volg geïnisialiseer

$test_array = , 1

Toegang tot skikkingselemente word verkry deur gebruik te maak van 'n nul-gebaseerde heelgetalindeks en die indeksoperateur (vierkantige hakies):

$test_array[0] = 1

Jy kan verskeie indekse spesifiseer wat deur kommas geskei word, insluitend. herhalende:

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

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Operator .. (twee kolletjies - reeksoperateur) gee 'n verskeidenheid heelgetalle binne die gespesifiseerde boonste en onderste grense terug. Byvoorbeeld, uitdrukking 1..4 voer 'n skikking van vier elemente @(1, 2, 3, 4) uit, en uitdrukking 8..5 voer 'n skikking @(8, 7, 6, 5) uit.

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Deur die reeksoperateur te gebruik, kan jy 'n skikking ($test_array = 1..4) inisialiseer of 'n sny (sny) kry, d.w.s. 'n reeks elemente van een skikking met indekse van 'n ander. In hierdie geval dui 'n negatiewe getal -1 die laaste element van die skikking aan, -2 - die voorlaaste een, ensovoorts.

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

Let daarop dat heelgetal-skikkingwaardes groter kan wees as die maksimum indekswaarde van die dataskikking. In hierdie geval word alle waardes teruggestuur tot by die laaste een:

$test_array[0..100]

As jy probeer om toegang tot 'n enkele nie-bestaande skikking element te kry, word $null teruggestuur.

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

In PowerShell kan skikkings elemente van verskillende tipes bevat of sterk getik word:

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

Waar die $test_array.count-eienskap die aantal skikkingselemente is.

'n Voorbeeld van die skep van 'n sterk getikte skikking:

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

Hash-tabelle

Nog 'n basiese tipe veranderlikes in die PowerShell-taal is hash-tabelle, ook bekend as assosiatiewe skikkings. Hashtables is soortgelyk aan JSON-voorwerpe en is gebou op 'n sleutelwaarde-basis. Anders as gewone skikkings, word hul elemente verkry deur benoemde sleutels, wat eienskappe van die voorwerp is (jy kan ook die indeksoperateur gebruik - vierkantige hakies).

'n Leë hash-tabel word verklaar deur die @-simbool en operateurhakies te gebruik:

$test_hashtable = @{}

Wanneer u verklaar, kan u onmiddellik sleutels skep en waardes daaraan toeken:

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

Om 'n element by 'n hash-tabel te voeg, moet jy 'n sleutel wat nog nie bestaan ​​nie daaraan toewys, of die Add () metode gebruik. As 'n toewysing aan 'n bestaande sleutel gemaak word, sal die waarde daarvan verander. Die Remove() metode word gebruik om 'n element uit 'n hash-tabel te verwyder.

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

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Veranderlikes van hierdie tipe kan as argumente na funksies en cmdlets deurgegee word - in die volgende artikel sal ons bestudeer hoe dit gedoen word, en ook 'n ander soortgelyke tipe oorweeg - PSCustomObject.

Funksies

PowerShell het alles wat jy nodig het vir prosedurele programmering, insluitend funksies. Om hulle te beskryf, word die funksiewoord Funksie gebruik, waarna jy die naam van die funksie en die liggaam tussen operateurhakies moet spesifiseer. As jy argumente na die funksie moet deurgee, kan jy dit onmiddellik na die naam tussen hakies spesifiseer.

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

Die funksie gee altyd 'n resultaat - dit is 'n reeks van die resultate van al sy stellings, as daar meer as een is. As daar net een stelling is, word die enigste waarde van die ooreenstemmende tipe teruggestuur. Die return $value-konstruk voeg 'n element met die waarde $value by die resultaatskikking en staak die uitvoering van die stellingslys, en die leë funksie gee $nul terug.

Kom ons skep byvoorbeeld 'n funksie om 'n getal te kwadraat:

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

Let daarop dat jy in die liggaam van 'n funksie enige veranderlikes kan gebruik wat verklaar is voordat dit opgeroep word, en die oproep van funksies in PowerShell mag dalk ongewoon lyk: die argumente (indien enige) is nie tussen hakies ingesluit nie en word deur spasies geskei.

sqr 2

of so:

sqr -number 2

As gevolg van die manier waarop argumente deurgegee word, moet die funksie self soms tussen hakies ingesluit word:

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

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Wanneer u 'n funksie beskryf, kan u verstekwaardes aan argumente toewys:

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

Daar is nog 'n sintaksis vir die beskrywing van funksie-argumente, daarby kan parameters van die pyplyn gelees word - dit alles sal handig te pas kom in die volgende artikel, wanneer ons kyk na uitgevoerde modules en die skep van ons eie cmdlets.

Kon nie verwerk nie

PowerShell het 'n Try ... Catch ... Uiteindelik meganisme om uitsonderings te hanteer. Die Try-blok bevat die kode waarin 'n fout kan voorkom, en die Catch-blok bevat sy hanteerder. As daar geen fout was nie, word dit nie uitgevoer nie. Die Uiteindelik-blok word na die Probeer-blok uitgevoer, ongeag die voorkoms van 'n fout, en daar kan verskeie Catch-blokke vir verskillende tipes uitsonderings wees. Die uitsondering self is geskryf na 'n onverklaarde verstekveranderlike ($_) en kan maklik herwin word. In die voorbeeld hieronder implementeer ons beskerming teen die invoer van 'n ongeldige waarde:

try {

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

} catch {

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

}

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Dit sluit die hersiening van die basiese beginsels van programmering in die PowerShell-taal af. In die volgende artikels sal ons in meer besonderhede bestudeer werk met veranderlikes van verskillende tipes, versamelings, gereelde uitdrukkings, die skep van funksies, modules en pasgemaakte cmdlets, sowel as objekgeoriënteerde programmering.

Wat is Windows PowerShell en waarmee word dit geëet? Deel 2: Inleiding tot die programmeertaal

Bron: will.com

Voeg 'n opmerking