Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Sa kasaysayan, ang command-line utilities sa Unix system mas maayo nga naugmad kaysa sa Windows, apan sa pag-abot sa bag-ong solusyon, ang sitwasyon nausab.

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Ang PowerShell mahimong ma-script sa usa ka interpreted, multi-paradigm nga pinulongan nga adunay mga elemento sa classic procedural, object-oriented, ug bisan functional programming: conditional branching, loops, variables, arrays, hash tables, classes, error handling, ingon man mga function, cmdlet, ug pipelines . Niaging artikulo gipahinungod sa mga sukaranan sa pagtrabaho sa palibot, ug karon kami nagtanyag sa mga magbabasa og gamay nga giya alang sa mga programmer.

Talaan sa mga sulod:

Комментарии
Mga variable ug ang ilang mga tipo
Mga variable sa sistema
Sakop
Mga variable sa palibot (kalibotan)
Mga operator sa aritmetika ug pagtandi
Mga operator sa assignment
Lohikal nga mga operator
Kondisyonal nga Paglukso
Mga siklo
Mga laray
Hash nga mga lamesa
Mga katuyoan
Sayop sa pagproseso

Makasulat ka og code sa bisan unsang text editor o gamit ang integrated development environment - ang pinakasayon ​​nga paagi mao ang pagkuha sa Windows PowerShell ISE nga kauban sa Microsoft server operating system. Kini gikinahanglan lamang alang sa medyo komplikado nga mga script: ang mugbo nga mga set sa mga sugo mas sayon ​​nga ipatuman nga interactive.

Комментарии

Ang paggamit sa mga komentaryo gikonsiderar nga bahin sa maayong istilo sa pagprograma kauban ang husto nga indentation ug whitespace:

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

<# 

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

#>

Mga variable ug ang ilang mga tipo

Ang mga variable sa PowerShell ginganlan og mga butang. Ang ilang mga ngalan mahimong maglakip sa underscore nga karakter, ingon man mga letra ug numero. Ang simbolo nga $ kanunay gigamit sa wala pa ang ngalan, ug aron ipahayag ang usa ka variable, igo na nga hatagan ang tighubad ug usa ka balido nga ngalan:

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Aron masugdan ang usa ka variable (paghatag og usa ka bili niini), ang assignment operator (simbol =) gigamit:

$test = 100

Mahimo nimong ideklara ang usa ka variable pinaagi sa pagtino sa tipo niini sa square bracket (type casting operator) sa wala pa ang ngalan o kantidad:

[int]$test = 100

$test = [int]100

Importante nga masabtan nga ang mga baryable sa PowerShell kay bug-os nga mga butang (mga klase) nga adunay mga kabtangan ug mga pamaagi kansang mga tipo gibase sa anaa sa .NET Core. Gilista namo ang mga nag-unang mga:

Type (.NET nga klase)

paghulagway

Pananglitan sa code

[string] System.String

Unicode string 

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

[char]System.Char

Unicode nga karakter (16 bits)

[char]$test = 'c'

[bool] System.Boolean

boolean type (boolean True or False)

[bool]$test = $tinuod

[int] System.Int32

katloan ug duha ka bit integer (32 bits)

[int]$test = 123456789

[taas] System.Int64

kan-uman ug upat ka bit integer (64 bits)

[taas]$test = 12345678910

[single] System.Single

floating point nga numero 32 bits ang gitas-on

[single]$test = 12345.6789

[doble]System.Doble

floating point nga gidaghanon sa gitas-on 64 bits (8 bytes)

[doble]$test = 123456789.101112

[decimal]System.Decimal

128-bit floating point nga numero (gikinahanglan nga tapuson sa d)

[decimal]$test = 12345.6789d

[PetsaOras]System.PetsaOras

petsa ug oras 

$test = GetDate

[array] System.Object[]

usa ka laray kansang indeks sa elemento nagsugod sa 0

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

[hashtable] System.Collections.Hashtable

Ang hash nga mga lamesa kay mga associative arrays nga adunay ginganlan nga mga yawe, gitukod sumala sa prinsipyo: @{key = "value"}

$test_hashtable = @{one="one"; duha = "duha"; tulo="tulo"}

Gisuportahan sa PowerShell ang implicit type nga pagkakabig, dugang pa, ang tipo sa usa ka variable mahimong mabag-o sa langaw (pananglitan, gamit ang usa ka operator sa assignment), kung wala kini gipiho nga pinugos - sa kini nga kaso, ang tighubad maghatag usa ka sayup. Mahimo nimong mahibal-an ang tipo sa variable gikan sa miaging pananglitan pinaagi sa pagtawag sa GetType() nga pamaagi:

$test.GetType().FullName

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Adunay daghang mga cmdlet alang sa pagmaniobra sa mga variable. Ang ilang listahan sa usa ka kombenyente nga porma gipakita gamit ang sugo:

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

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Aron makita ang gipahayag nga mga variable ug ang ilang mga kantidad, mahimo nimong gamiton ang usa ka espesyal nga cmdlet:

Get-Variable | more

Kini nga pamaagi daw sobra ka hago, mas sayon ​​​​ang pagtrabaho sa mga variable pinaagi sa mga operator o pinaagi sa pag-access sa ilang mga kabtangan ug mga pamaagi direkta. Bisan pa, ang mga cmdlet adunay katungod nga maglungtad tungod kay gitugotan ka nila nga magbutang pipila nga dugang nga mga parameter. Importante nga masabtan nga ang mga baryable sa tiggamit gihubit lamang sulod sa kasamtangan nga sesyon. Kung ang console sirado o ang script matapos, kini mapapas.

Mga variable sa sistema

Dugang pa sa mga gipahayag sa user, adunay mga built-in (system) nga mga variable nga dili mapapas pagkahuman sa karon nga sesyon. Gibahin sila sa duha ka mga tipo, samtang ang datos sa estado sa PowerShell gitipigan sa mga awtomatikong variable nga dili ma-assign nga mga arbitraryong kantidad sa ilang kaugalingon. Naglakip kini, pananglitan, $PWD:

$PWD.Path

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Ang mga kapilian sa kagustuhan gikinahanglan aron matipigan ang mga gusto sa tiggamit, ang mga kantidad nga mahimong usbon. Pananglitan, gamit ang $ErrorActionPreference , ang reaksyon sa command interpreter sa panghitabo sa dili-makamatay nga mga sayop gitakda.

Dugang pa sa mga operator ug cmdlet alang sa pag-access sa gipahayag nga mga variable, adunay usa ka Variable: pseudo-accumulator. Mahimo nimong buhaton kini pinaagi sa pagtandi sa ubang mga drive, ug ang mga variable sa kini nga kaso susama sa mga butang sa file system:

Get-ChildItem Variable: | more

o

ls Variable: | more

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Sakop

Para sa mga variable sa PowerShell, adunay konsepto sa scope (Scope). Ang aksyon sa global nga sakup (Global) magamit sa tibuuk nga karon nga sesyon - kini naglakip, pananglitan, mga variable sa sistema. Ang mga lokal (Lokal) nga mga baryable anaa lamang sa gidak-on diin sila gihubit: ingna sulod sa usa ka function. Adunay usab ang konsepto sa sakup sa script (Script), apan alang sa mga mando sa script, kini sa tinuud lokal. Sa kasagaran, sa dihang nagdeklara sa mga variable, gihatagan sila ug lokal nga scope, ug aron mausab kini, kinahanglan nimo ang usa ka espesyal nga pagtukod sama sa: $Global: variable = value.

Pananglitan, sama niini:

$Global:test = 100

Mga variable sa palibot (kalibotan)

Ang laing pseudo-drive, Env:, anaa gikan sa PowerShell ug magamit sa pag-access sa mga variable sa palibot. Kung magsugod ang kabhang, kini gikopya gikan sa proseso sa ginikanan (nga mao, gikan sa programa nga nagsugod sa karon nga sesyon) ug kasagaran ang ilang mga inisyal nga kantidad parehas sa mga kantidad sa control panel. Aron matan-aw ang mga variable sa palibot, gamita ang Get-ChildItem cmdlet o ang mga alyas niini (mga alias): ls ug dir.

dir Env:

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Kini nga mga baryable mao ang mga han-ay sa mga byte (o mga karakter, kung gusto nimo), ang paghubad niini nagdepende lamang sa programa nga naggamit niini. Ang *-Variable cmdlets dili mugana sa environment variables. Aron ma-access kini, kinahanglan nimong gamiton ang prefix sa drive:

$env:TEST = "Hello, World!"

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Mga operator sa aritmetika ug pagtandi

Ang PowerShell naghatag sa mosunod nga mga operator sa aritmetika: + (dugang), - (pagkuha), * (multiply), / (division), ug % (modulo o modulo). Ang resulta sa usa ka aritmetikong ekspresyon gitimbang-timbang gikan sa wala ngadto sa tuo sumala sa gidawat nga han-ay sa mga operasyon, ug ang mga parentesis gigamit sa paggrupo sa mga bahin sa ekspresyon. Ang mga luna tali sa mga operator wala panumbalinga, kini gigamit lamang aron mas sayon ​​ang pagbasa. Ang + operator usab nagdugtong, ug ang * operator nagsubli sa mga kuwerdas. Kung mosulay ka pagdugang usa ka numero sa usa ka hilo, kini makombertir sa usa ka hilo. Dugang pa, ang PowerShell nga lengguwahe adunay daghang mga operator sa pagtandi nga nagsusi alang sa usa ka panagsama tali sa duha nga mga kantidad ug gibalik ang boolean nga Tinuod o Bakak:

Operator

paghulagway

Pananglitan sa code

-eq

Equal / Equals (susama sa = o == sa ubang mga pinulongan)

$pagsulay = 100
$pagsulay -eq 123 

- mao

Dili managsama / Dili managsama (susama sa <> o !=)

$pagsulay = 100
$pagsulay -ne 123   

-gt

Labaw sa / Dugang (analogue >)

$pagsulay = 100
$pagsulay -gt 123

-ge

Labaw sa o katumbas / Labaw sa o katumbas (susama sa >=)

$pagsulay = 100
$pagsulay -ge 123

-lt

Ubos sa / Dili kaayo (susama sa <)

$pagsulay = 100
$pagsulay -lt 123  

-ang

Mas gamay o parehas / Mas gamay o parehas (sama sa <=)

$pagsulay = 100
$pagsulay -le 123

Adunay uban nga susama nga mga operator nga nagtugot kanimo, pananglitan, pagtandi sa mga kuwerdas base sa usa ka wildcard o paggamit sa regular nga mga ekspresyon aron sa pagpares sa usa ka sumbanan. Atong hisgotan sila sa detalye sa umaabot nga mga artikulo. Ang mga simbolo <, > ug = wala gigamit alang sa pagtandi tungod kay kini gigamit alang sa ubang mga katuyoan.

Mga operator sa assignment

Dugang pa sa labing komon nga = operator, adunay uban nga assignment operators: +=, -=, *=, /= ug %=. Gibag-o nila ang kantidad sa wala pa ang buluhaton. Ang unary operators ++ ug -, nga nagpataas o nagpamenos sa bili sa usa ka variable, naggawi sa susama - sila usab magamit sa assignment operators.

Lohikal nga mga operator

Ang pagtandi lamang dili igo sa paghulagway sa komplikadong mga kahimtang. Mahimo nimong isulat ang bisan unsang lohikal nga mga ekspresyon gamit ang mga operator: -ug, -o, -xor, -dili ug!

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

-not (123 -gt 321) 

!(123 -gt 321)

Kondisyonal nga Paglukso

Ang mga operator sa sanga sa PowerShell kay standard: IF(IF...ELSE, IF...ELSEIF...ELSE) ug SWITCH. Atong tan-awon ang ilang paggamit sa mga pananglitan:

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

Mga siklo

Ang PowerShell adunay ubay-ubay nga klase sa mga loops: WHILE, DO WHILE, DO UNTIL, FOR, ug FOREACH.

Ang usa ka loop nga adunay precondition molihok kung / basta kini tinuod:

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

Ang mga loop nga adunay postcondition modagan labing menos kausa, tungod kay ang kondisyon gisusi pagkahuman sa pag-uli. Sa samang higayon, BUHATA SAMTANG nagtrabaho samtang ang kondisyon tinuod, ug BUHATA HANGTOD molihok samtang kini bakak:

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

Ang gidaghanon sa mga pag-usab sa FOR loop nahibal-an daan:

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

Sa FOREACH loop, gisubli ang mga elemento sa array o koleksyon (hash table):

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

Mga laray

Ang mga variable sa PowerShell nagtipig dili lamang sa usa ka butang (numero, string, ug uban pa), apan daghan usab. Ang pinakasimple nga matang sa maong mga baryable mao ang mga arrays. Ang usa ka array mahimong maglangkob sa daghang mga elemento, usa ka elemento, o walay sulod, i.e. walay elemento. Gideklara kini gamit ang @() operator, nga atong gikinahanglan sa sunod nga artikulo - importante kaayo kini sa pagdugang sa ubang mga arrays sa array (pagmugna og multidimensional arrays), pagpasa sa arrays ngadto sa functions isip argumento, ug susamang mga buluhaton:

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

Kung ang usa ka array gisugdan, ang mga kantidad niini gilista nga gibulag sa mga koma (espesyal nga operator ,):

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

Sa kadaghanan nga mga kaso, ang operator nga @() mahimong tangtangon:

$test_array = 1, 2, 3, 4

Sa kini nga kaso, usa ka han-ay sa usa ka elemento ang gisugdan ingon sa mosunod

$test_array = , 1

Ang mga elemento sa array gi-access gamit ang zero-based integer index ug ang index operator (square bracket):

$test_array[0] = 1

Mahimo nimong itakda ang daghang mga indeks nga gibulag sa mga koma, apil. nagbalikbalik:

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

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Operator .. (duha ka tuldok - range operator) nagbalik sa usa ka han-ay sa mga integer sulod sa gipiho nga taas ug ubos nga mga utlanan. Pananglitan, ang ekspresyon 1..4 nagpagawas ug laray sa upat ka elemento @(1, 2, 3, 4), ug ang ekspresyon 8..5 nagpagawas ug array @(8, 7, 6, 5).

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Gamit ang range operator, mahimo nimong masugdan ang usa ka array ($test_array = 1..4) o makakuha og slice (slice), i.e. usa ka han-ay sa mga elemento gikan sa usa ka laray nga adunay mga indeks gikan sa lain. Sa kini nga kaso, ang negatibo nga numero -1 nagpasabut sa katapusan nga elemento sa laray, -2 - ang penultimate, ug uban pa.

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

Timan-i nga ang integer array values ​​mahimong mas dako kay sa maximum index value sa data array. Sa kini nga kaso, ang tanan nga mga kantidad gibalik hangtod sa katapusan:

$test_array[0..100]

Kung sulayan nimo ang pag-access sa usa ka wala nga elemento sa array, ang $ null ibalik.

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Sa PowerShell, ang mga arrays mahimong maglangkob sa mga elemento sa lain-laing matang o kusganong gi-type:

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

Diin ang $test_array.count property mao ang gidaghanon sa array elements.

Usa ka pananglitan sa paghimo sa usa ka kusgan nga gi-type nga array:

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

Hash nga mga lamesa

Ang laing sukaranang matang sa mga variable sa PowerShell nga pinulongan mao ang hash tables, nailhan usab nga associative arrays. Ang mga Hashtable parehas sa mga butang sa JSON ug gitukod sa sukaranan nga sukaranan nga kantidad. Dili sama sa ordinaryo nga mga arrays, ang ilang mga elemento ma-access pinaagi sa ginganlan nga mga yawe, nga mga kabtangan sa butang (mahimo usab nimo gamiton ang index operator - square brackets).

Ang usa ka walay sulod nga hash nga lamesa gideklarar gamit ang @ simbolo ug operator bracket:

$test_hashtable = @{}

Kung nagpahayag, mahimo ka dayon nga maghimo mga yawe ug maghatag mga kantidad sa kanila:

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

Aron makadugang ug elemento sa hash table, kinahanglang mag-assign ka ug yawe nga wala pa niini, o gamita ang Add () nga pamaagi. Kung ang usa ka assignment gihimo sa usa ka kasamtangan nga yawe, ang bili niini mausab. Ang Remove() nga pamaagi gigamit sa pagtangtang sa usa ka elemento gikan sa hash table.

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

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Ang mga variable sa kini nga klase mahimong ipasa ingon mga argumento sa mga gimbuhaton ug cmdlet - sa sunod nga artikulo atong tun-an kung giunsa kini nahimo, ug tagdon usab ang lain nga parehas nga tipo - PSCustomObject.

Mga katuyoan

Ang PowerShell adunay tanan nga imong gikinahanglan alang sa procedural programming, lakip ang mga function. Aron ihulagway sila, gigamit ang pulong nga function Function, pagkahuman kinahanglan nimo ipiho ang ngalan sa function ug ang lawas nga gilakip sa mga bracket sa operator. Kung kinahanglan nimo nga ipasa ang mga argumento sa function, mahimo nimo kini mahibal-an dayon pagkahuman sa ngalan sa mga parentheses.

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

Ang function kanunay nga nagbalik sa usa ka resulta - kini usa ka han-ay sa mga resulta sa tanan nga mga pahayag niini, kung adunay labaw pa sa usa. Kung adunay usa lamang ka pahayag, ang bugtong kantidad sa katugbang nga tipo ibalik. Ang return $value construct nagdugang ug elemento nga adunay value nga $value sa resulta array ug gi-abort ang pagpatuman sa statement list, ug ang walay sulod nga function mobalik $null.

Pananglitan, maghimo kita usa ka function alang sa pag-squaring sa usa ka numero:

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

Timan-i nga sa lawas sa usa ka function, mahimo nimong gamiton ang bisan unsang mga variable nga gipahayag sa wala pa kini tawagan, ug ang mga function sa pagtawag sa PowerShell mahimo’g ingon dili kasagaran: ang mga argumento (kung naa) wala gilakip sa parentheses ug gibulag sa mga espasyo.

sqr 2

o sa ingon:

sqr -number 2

Tungod sa paagi nga ang mga argumento gipasa, ang function mismo usahay kinahanglan nga ilakip sa parentheses:

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

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Kung naghulagway sa usa ka function, mahimo nimong i-assign ang mga default nga kantidad sa mga argumento:

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

Adunay lain nga syntax alang sa paghulagway sa mga argumento sa function, dugang pa, ang mga parameter mahimong mabasa gikan sa pipeline - kining tanan magamit sa sunod nga artikulo, kung atong tan-awon ang mga gi-eksport nga mga module ug paghimo sa atong kaugalingon nga mga cmdlet.

Sayop sa pagproseso

Ang PowerShell adunay Try...Catch...Sa katapusan mekanismo sa pagdumala sa mga eksepsiyon. Ang Try block naglangkob sa code diin ang usa ka sayup mahimong mahitabo, ug ang Catch block adunay tagdumala niini. Kung walay sayop, dili kini ipatuman. Ang Katapusan nga block gipatuman pagkahuman sa Try block, bisan unsa pa ang nahitabo sa usa ka sayup, ug adunay daghang mga bloke sa Catch alang sa lainlaing mga lahi sa mga eksepsiyon. Ang eksepsiyon mismo gisulat sa usa ka wala gipahayag nga default variable ($_) ug dali nga makuha. Sa pananglitan sa ubos, among gipatuman ang proteksyon batok sa pagsulod sa dili balido nga kantidad:

try {

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

} catch {

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

}

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Kini nagtapos sa pagrepaso sa mga sukaranan sa programming sa PowerShell nga pinulongan. Sa mosunod nga mga artikulo, atong tun-an sa mas detalyado nga pagtrabaho uban sa mga variable sa lain-laing mga matang, koleksyon, regular nga mga ekspresyon, pagmugna function, modules ug custom cmdlets, ingon man sa object-oriented programming.

Unsa ang Windows PowerShell ug unsa ang gikaon niini? Bahin 2: Pasiuna sa programming language

Source: www.habr.com

Idugang sa usa ka comment