Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Тарихи түрде Unix жүйелеріндегі пәрмен жолы утилиталары Windows жүйесіне қарағанда жақсы дамыған, бірақ жаңа шешімнің пайда болуымен жағдай өзгерді.

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

PowerShell-ті интерпретацияланған, көп парадигмалық тілде жазуға болады, оның классикалық процедуралық, объектіге бағытталған және тіпті функционалдық бағдарламалау элементтері бар: шартты тармақталу, циклдар, айнымалылар, массивтер, хэш кестелері, сыныптар, қателерді өңдеу, сонымен қатар функциялар, командлеттер және құбырлар . Алдыңғы мақала ортада жұмыс істеу негіздеріне арналды, енді біз оқырмандарымызға бағдарламашыларға арналған шағын анықтамалықты ұсынамыз.

Мазмұны:

Пікірлер
Айнымалылар және олардың түрлері
Жүйелік айнымалылар
Қолдану аумақтары
Қоршаған ортаның айнымалылары (орта)
Арифметикалық және салыстыру операторлары
Тағайындау операторлары
Логикалық операторлар
Шартты секіру
Циклдар
Массивтер
Хэш кестелері
Функциялар
Өңдеу қатесі

Кодты кез келген мәтіндік редакторда немесе біріктірілген әзірлеу ортасын пайдалану арқылы жаза аласыз - ең оңай жолы - Microsoft серверінің операциялық жүйелерімен бірге келетін Windows PowerShell ISE алу. Бұл өте күрделі сценарийлер үшін ғана қажет: командалардың қысқа жинақтары интерактивті түрде оңай орындалады.

Пікірлер

Түсініктемелерді пайдалану дұрыс шегіністер мен бос орындармен бірге жақсы бағдарламалау стилінің бөлігі болып саналады:

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

<# 

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

#>

Айнымалылар және олардың түрлері

PowerShell ішіндегі айнымалылар аталған нысандар болып табылады. Олардың атаулары астын сызу таңбасын, сондай-ақ әріптер мен сандарды қамтуы мүмкін. $ символы әрқашан атаудан бұрын қолданылады және айнымалыны жариялау үшін аудармашыға жарамды атау беру жеткілікті:

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Айнымалыны инициализациялау үшін (оған мән тағайындау) тағайындау операторы (символ =) пайдаланылады:

$test = 100

Айнымалы мәнді атау немесе мән алдында оның түрін төртбұрышты жақшаға (типті құю операторы) көрсету арқылы жариялауға болады:

[int]$test = 100

$test = [int]100

PowerShell бағдарламасындағы айнымалылар .NET Core жүйесіндегілерге негізделген қасиеттері мен әдістері бар толыққанды нысандар (сыныптар) екенін түсіну маңызды. Біз негізгілерін тізімдейміз:

Түр (.NET класы)

сипаттамасы

Код мысалы

[жол] System.String

Юникод жолы 

$test = "сынақ"
$test = 'test'

[char]System.Char

Юникод таңбасы (16 бит)

[char]$test = 'c'

[bool] Жүйе. Логикалық

логикалық түрі (логикалық True немесе False)

[bool]$test = $true

[int] System.Int32

отыз екі биттік бүтін сан (32 бит)

[int]$test = 123456789

[ұзын] System.Int64

алпыс төрт бит бүтін сан (64 бит)

[ұзын]$тест = 12345678910

[бір] System.Single

өзгермелі нүктенің саны 32 бит ұзындығы

[бір]$тест = 12345.6789

[double]System.Double

Ұзындығы өзгермелі нүкте саны 64 бит (8 байт)

[double]$test = 123456789.101112

[ондық]Жүйе.Ондық

128 биттік өзгермелі нүкте нөмірі (d әрпімен аяқталуы керек)

[ондық]$тест = 12345.6789d

[DateTime]System.DateTime

күні мен уақыты 

$test = GetDate

[массив] System.Object[]

элемент индексі 0-ден басталатын массив

$test_массив = 1, 2, "сынақ", 3, 4

[хэштеб] System.Collections.Hashtable

хэш-кестелер мына принцип бойынша құрастырылған, аталған кілттері бар ассоциативті массивтер болып табылады: @{key = "мән"}

$test_hashtable = @{one="one"; екі = "екі"; үш = "үш"}

PowerShell жасырын түрлендіруді қолдайды, сонымен қатар айнымалының түрін жылдам өзгертуге болады (мысалы, тағайындау операторын пайдалану), егер ол мәжбүрлеп көрсетілмесе - бұл жағдайда аудармашы қате береді. GetType() әдісін шақыру арқылы алдыңғы мысалдағы айнымалының түрін анықтауға болады:

$test.GetType().FullName

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Айнымалы мәндерді басқаруға арналған бірнеше командлеттер бар. Олардың тізімі ыңғайлы пішінде пәрмен арқылы көрсетіледі:

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

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Жарияланған айнымалылар мен олардың мәндерін көру үшін арнайы командлетті пайдалануға болады:

Get-Variable | more

Бұл әдіс тым қиын болып көрінеді, айнымалылармен операторлар арқылы немесе олардың қасиеттері мен әдістеріне тікелей қол жеткізу арқылы жұмыс істеу әлдеқайда ыңғайлы. Дегенмен, командлеттердің өмір сүруге құқығы бар, себебі олар кейбір қосымша параметрлерді орнатуға мүмкіндік береді. Пайдаланушы айнымалы мәндері тек ағымдағы сеанс ішінде анықталатынын түсіну маңызды. Консоль жабылғанда немесе сценарий аяқталғанда, олар жойылады.

Жүйелік айнымалылар

Пайдаланушы мәлімдегендерден басқа, ағымдағы сеанс аяқталғаннан кейін жойылмайтын кірістірілген (жүйелік) айнымалылар бар. Олар екі түрге бөлінеді, ал PowerShell күйінің деректері өздігінен еркін мәндерді тағайындауға болмайтын автоматты айнымалыларда сақталады. Оларға, мысалы, $PWD кіреді:

$PWD.Path

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Артықшылық айнымалылары мәндерін өзгертуге болатын пайдаланушы қалауларын сақтау үшін қажет. Мысалы, $ErrorActionPreference көмегімен команда интерпретаторының өлімге әкелмейтін қателердің пайда болуына реакциясы орнатылады.

Жарияланған айнымалы мәндерге қол жеткізу үшін операторлар мен командлеттерден басқа, Айнымалы бар: жалған аккумулятор. Сіз онымен басқа дискілермен ұқсастық бойынша жұмыс істей аласыз және бұл жағдайда айнымалылар файлдық жүйе нысандарына ұқсайды:

Get-ChildItem Variable: | more

немесе

ls Variable: | more

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Қолдану аумақтары

PowerShell ішіндегі айнымалылар үшін аумақ (Scope) ұғымы бар. Жаһандық аумақтың әрекеті (Global) бүкіл ағымдағы сеансқа қолданылады - ол, мысалы, жүйелік айнымалы мәндерді қамтиды. Жергілікті (жергілікті) айнымалылар олар анықталған аумақта ғана қолжетімді: функцияның ішінде айтыңыз. Сондай-ақ скрипттің (скрипт) ауқымы туралы түсінік бар, бірақ сценарий командалары үшін ол негізінен жергілікті болып табылады. Әдепкі бойынша, айнымалы мәндерді жариялау кезінде оларға жергілікті аумақ беріледі және оны өзгерту үшін сізге арнайы құрылым қажет, мысалы: $Global: айнымалы = мән.

Мысалы, бұл:

$Global:test = 100

Қоршаған ортаның айнымалылары (орта)

Басқа жалған диск, Env:, PowerShell бағдарламасында қол жетімді және оны орта айнымалыларына қол жеткізу үшін пайдалануға болады. Қабық іске қосылғанда, олар негізгі процестен (яғни ағымдағы сеансты бастаған бағдарламадан) көшіріледі және әдетте олардың бастапқы мәндері басқару тақтасындағы мәндермен бірдей болады. Ортаның айнымалы мәндерін көру үшін Get-ChildItem командлетін немесе оның бүркеншік атын (бүркеншік атын) пайдаланыңыз: ls және dir.

dir Env:

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Бұл айнымалылар байттардың тізбегі (немесе қаласаңыз, таңбалар), олардың интерпретациясы тек оларды пайдаланатын бағдарламаға байланысты. *-Variable командлеттері орта айнымалыларымен жұмыс істемейді. Оларға қол жеткізу үшін диск префиксін пайдалану керек:

$env:TEST = "Hello, World!"

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Арифметикалық және салыстыру операторлары

PowerShell келесі арифметикалық операторларды қамтамасыз етеді: + (қосу), - (алу), * (көбейту), / (бөлу) және % (модуль немесе модуль). Арифметикалық өрнектің нәтижесі жалпы қабылданған амалдар ретіне сәйкес солдан оңға қарай бағаланады және өрнек бөліктерін топтастыру үшін жақшалар қолданылады. Операторлар арасындағы бос орындар еленбейді, олар түсінуге ыңғайлы болу үшін ғана пайдаланылады. + операторы да біріктіреді, ал * операторы жолдарды қайталайды. Жолға сан қосқыңыз келсе, ол жолға түрлендіріледі. Сонымен қатар, PowerShell жүйесінде екі мән арасындағы сәйкестікті тексеретін және логикалық True немесе False мәнін қайтаратын көптеген салыстыру операторлары бар:

Оператор

сипаттамасы

Код мысалы

-тең

Тең / Тең (басқа тілдердегі = немесе == сияқты)

$тест = 100
$тест -экв 123 

-жоқ

Тең емес / Тең емес (<> немесе != сияқты)

$тест = 100
$test -ne 123   

-gt

Үлкен / Көбірек (аналогты >)

$тест = 100
$test -gt 123

-жас

Үлкен немесе тең / Үлкен немесе тең (>= ұқсас)

$тест = 100
$test -ge 123

-лт

Кем / Кем (< ұқсас)

$тест = 100
$test -lt 123  

-ле

Кем немесе тең / Кіші немесе тең (<= ұқсас)

$тест = 100
$test -le 123

Мысалы, қойылмалы таңбаға негізделген жолдарды салыстыруға немесе үлгіні сәйкестендіру үшін тұрақты өрнектерді пайдалануға мүмкіндік беретін басқа ұқсас операторлар бар. Біз оларды келесі мақалаларда егжей-тегжейлі қарастырамыз. <, > және = таңбалары салыстыру үшін пайдаланылмайды, өйткені олар басқа мақсаттарда қолданылады.

Тағайындау операторлары

Ең көп таралған = операторынан басқа тағайындау операторлары бар: +=, -=, *=, /= және %=. Олар тағайындау алдында мәнді өзгертеді. Айнымалының мәнін арттыратын немесе азайтатын ++ және - біртұтас операторлары бірдей әрекет етеді - олар тағайындау операторларына да қолданылады.

Логикалық операторлар

Күрделі жағдайларды сипаттау үшін тек салыстыру жеткіліксіз. Операторлардың көмегімен кез келген логикалық өрнектерді жазуға болады: -and, -or, -xor, -not and! .. Олар басқа бағдарламалау тілдеріндегідей жұмыс істейді, ал бағалау ретін көрсету үшін жақшаларды пайдалануға болады:

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

-not (123 -gt 321) 

!(123 -gt 321)

Шартты секіру

PowerShell жүйесіндегі филиал операторлары стандартты болып табылады: IF(IF...ELSE, IF...ELSEIF...ALSE) және SWITCH. Олардың қолданылуын мысалдармен қарастырайық:

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

Циклдар

PowerShell жүйесінде циклдердің бірнеше түрі бар: WHILE, DO WHILE, DO DUNTIL, FOR және FOREACH.

Алдын ала шарты бар цикл, егер/ақиқат болса, жұмыс істейді:

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

Постшарттары бар циклдер кем дегенде бір рет орындалады, себебі шарт итерациядан кейін тексеріледі. Сонымен бірге DO WHILE шарт шын болғанда жұмыс істейді, ал DO UNTIL жалған болғанда жұмыс істейді:

[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 циклінің қайталану саны алдын ала белгілі:

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

FOREACH циклінде массивтің немесе жинақтың элементтерін қайталайды (хэш кестесі):

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

Массивтер

PowerShell айнымалылары жалғыз нысандарды (сан, жол және т.б.) ғана емес, сонымен қатар бірнеше нысандарды да сақтайды. Мұндай айнымалылардың ең қарапайым түрі массивтер болып табылады. Массив бірнеше элементтерден, бір элементтен тұруы немесе бос болуы мүмкін, яғни. элементтері жоқ. Ол @() операторының көмегімен жарияланады, ол бізге келесі мақалада қажет болады - массивке басқа массивтерді қосу (көп өлшемді массивтерді құру), массивтерді функцияларға аргумент ретінде беру және ұқсас тапсырмалар үшін өте маңызды:

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

Массив инициализацияланған кезде оның мәндері үтірмен бөлінген тізімде (арнайы оператор ,):

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

Көп жағдайда @() операторын алып тастауға болады:

$test_array = 1, 2, 3, 4

Бұл жағдайда бір элементтің массиві келесідей инициализацияланады

$test_array = , 1

Массив элементтеріне нөлге негізделген бүтін индекс және индекс операторы (шаршы жақшалар) арқылы қол жеткізіледі:

$test_array[0] = 1

Үтірмен бөлінген бірнеше индексті көрсетуге болады, соның ішінде. қайталанатын:

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

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Оператор .. (екі нүкте – диапазон операторы) жоғарғы және төменгі шекаралармен көрсетілген ауқымдағы бүтін сандар массивін қайтарады. Мысалы, 1..4 өрнегі @(1, 2, 3, 4) төрт элементтің массивін шығарады, ал 8..5 өрнегі @(8, 7, 6, 5) массивін шығарады.

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Ауқым операторын пайдалана отырып, массивті инициализациялауға болады ($test_array = 1..4) немесе кесінді (кесінді), яғни. бір массивтің басқасының индекстері бар элементтер тізбегі. Бұл жағдайда теріс сан -1 массивтің соңғы элементін, -2 - соңғыдан кейінгі және т.б.

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

Бүтін массив мәндері деректер массивінің ең үлкен индекс мәнінен үлкен болуы мүмкін екенін ескеріңіз. Бұл жағдайда барлық мәндер соңғысына дейін қайтарылады:

$test_array[0..100]

Жалғыз жоқ массив элементіне қол жеткізгіңіз келсе, $null қайтарылады.

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

PowerShell бағдарламасында массивтер әртүрлі типтегі элементтерді қамтуы немесе қатты терілуі мүмкін:

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

Мұндағы $test_array.count сипаты жиым элементтерінің саны болып табылады.

Қатты терілген массив құру мысалы:

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

Хэш кестелері

PowerShell тіліндегі айнымалылардың тағы бір негізгі түрі ассоциативті массивтер ретінде белгілі хэш кестелері болып табылады. Хэш кестелері JSON нысандарына ұқсас және кілт-мән негізінде құрастырылған. Кәдімгі массивтерден айырмашылығы, олардың элементтеріне объектінің қасиеттері болып табылатын атаулы кілттер арқылы қол жеткізіледі (сондай-ақ индекс операторын – шаршы жақшаларды пайдалануға болады).

Бос хэш кестесі @ символы мен оператор жақшалары арқылы жарияланады:

$test_hashtable = @{}

Декларациялау кезінде сіз бірден кілттерді жасай аласыз және оларға мән бере аласыз:

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

Хэш кестесіне элемент қосу үшін оған әлі жоқ кілтті тағайындау керек немесе Add () әдісін пайдалану керек. Егер бар кілтке тағайындау жасалса, оның мәні өзгереді. Remove() әдісі хэш кестесінен элементті жою үшін қолданылады.

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

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Осы түрдегі айнымалы мәндерді функциялар мен командлеттерге аргументтер ретінде беруге болады - келесі мақалада мұның қалай жасалатынын зерттейміз, сонымен қатар басқа ұқсас типті - PSCustomObject қарастырамыз.

Функциялар

PowerShell-де процедуралық бағдарламалау үшін қажет нәрсенің бәрі бар, соның ішінде функциялар. Оларды сипаттау үшін Function функция сөзі пайдаланылады, одан кейін функцияның атын және оператор жақшаларына алынған денені көрсету керек. Функцияға аргументтерді беру қажет болса, оларды жақшадағы атаудан кейін бірден көрсетуге болады.

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

Функция әрқашан нәтижені қайтарады - бұл оның барлық мәлімдемелерінің нәтижелерінің массиві, егер біреуден көп болса. Бір ғана мәлімдеме болса, сәйкес түрдің жалғыз мәні қайтарылады. Қайтару $value конструкциясы $value мәні бар элементті нәтиже массивіне қосады және мәлімдемелер тізімінің орындалуын тоқтатады, ал бос функция $null мәнін қайтарады.

Мысалы, санды квадраттау функциясын құрайық:

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

Функцияның негізгі бөлігінде оны шақыру алдында жарияланған кез келген айнымалы мәндерді пайдалануға болатынын ескеріңіз және PowerShell бағдарламасында функцияларды шақыру әдеттен тыс болып көрінуі мүмкін: аргументтер (бар болса) жақшаға алынбайды және бос орындармен бөлінген.

sqr 2

немесе мыналар:

sqr -number 2

Аргументтерді беру тәсіліне байланысты функцияның өзі кейде жақшаға алынуы керек:

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

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Функцияны сипаттау кезінде аргументтерге әдепкі мәндерді тағайындауға болады:

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

Функция аргументтерін сипаттауға арналған тағы бір синтаксис бар, сонымен қатар параметрлерді құбырдан оқуға болады - мұның бәрі келесі мақалада экспортталған модульдерді қарап, өз командлеттерімізді жасағанда пайдалы болады.

Өңдеу қатесі

PowerShell бағдарламасында ерекше жағдайларды өңдеуге арналған Try...Catch...Finally механизмі бар. Try блогында қате орын алуы мүмкін код бар, ал Catch блогында оның өңдегіші бар. Егер қате болмаса, ол орындалмайды. Finally блогы Try блогынан кейін қатенің пайда болуына қарамастан орындалады және ерекше жағдайлардың әртүрлі түрлері үшін бірнеше Catch блоктары болуы мүмкін. Ерекшеліктің өзі жарияланбаған әдепкі айнымалыға ($_) жазылған және оны оңай алуға болады. Төмендегі мысалда біз жарамсыз мәнді енгізуден қорғауды жүзеге асырамыз:

try {

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

} catch {

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

}

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Осымен PowerShell тіліндегі бағдарламалау негіздерін шолу аяқталады. Келесі мақалаларда біз әртүрлі типтегі айнымалылармен, жинақтармен, тұрақты өрнектермен жұмыс істеуді, функцияларды, модульдерді және теңшелетін командлеттерді құруды, сондай-ақ объектіге бағытталған бағдарламалауды толығырақ қарастырамыз.

Windows PowerShell дегеніміз не және оны немен жейді? 2-бөлім: Бағдарламалау тіліне кіріспе

Ақпарат көзі: www.habr.com

пікір қалдыру