Tarixan, Unix tizimlaridagi buyruq satri yordamchi dasturlari avvalgilariga qaraganda ko'proq rivojlangan Windowsammo, yangi yechim paydo bo'lishi bilan vaziyat o'zgardi.
PowerShell klassik protsessual, ob'ektga yo'naltirilgan va hatto funktsional dasturlash elementlariga ega bo'lgan sharhlangan, ko'p paradigmali tilda yozilishi mumkin: shartli tarmoqlanish, tsikllar, o'zgaruvchilar, massivlar, xesh-jadvallar, sinflar, xatolarni qayta ishlash, shuningdek, funktsiyalar, cmdletlar va quvurlar. muhitda ishlash asoslariga bag'ishlangan edi va endi biz o'quvchilarga dasturchilar uchun kichik qo'llanmani taklif qilamiz.
Oglavlenie:
ΠΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΈΠ»ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ β ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²Π·ΡΡΡ Windows PowerShell ISE ΠΈΠ· ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Microsoft. ΠΡΠΆΠ½ΠΎ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ²: ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ Π½Π°Π±ΠΎΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠΎΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
Comments
Sharhlardan foydalanish to'g'ri chiziq va bo'sh joy bilan birga yaxshi dasturlash uslubining bir qismi hisoblanadi:
# ΠΠ»Ρ ΡΡΡΠΎΡΠ½ΡΡ
ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» ΡΠ΅ΡΠ΅ΡΠΊΠΈ β ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ.
<#
Π’Π°ΠΊ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ Π½Π°ΡΠ°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ Π±Π»ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΡΠ΅ΠΊΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ.
#>
O'zgaruvchilar va ularning turlari
PowerShell-dagi o'zgaruvchilar nomli ob'ektlardir. Ularning nomlari pastki chiziq belgisini, shuningdek harflar va raqamlarni o'z ichiga olishi mumkin. $ belgisi har doim nomdan oldin ishlatiladi va o'zgaruvchini e'lon qilish uchun tarjimonga haqiqiy nom berish kifoya:

O'zgaruvchini ishga tushirish (unga qiymat berish) uchun tayinlash operatori (belgi =) ishlatiladi:
$test = 100Siz oΚ»zgaruvchini nomi yoki qiymatidan oldin uning turini kvadrat qavs ichida (turi quyish operatori) belgilash orqali eΚΌlon qilishingiz mumkin:
[int]$test = 100
$test = [int]100PowerShell-dagi o'zgaruvchilar .NET Core-dagilarga asoslangan xususiyatlar va usullarga ega to'liq huquqli ob'ektlar (sinflar) ekanligini tushunish muhimdir. Biz asosiylarini sanab o'tamiz:
Turi (.NET sinfi)
Tavsif
Kod misoli
[string]
System.String
Unicode qator
$test = "test"
$test = 'test'
[char]
System.Char
Unicode belgisi (16 bit)
[char]$test = βcβ
[bool]
System.Boolean
mantiqiy turi (mantiqiy to'g'ri yoki noto'g'ri)
[bool]$test = $true
[int]
System.Int32
o'ttiz ikki bitli tamsayΔ± (32 bit)
[int]$test = 123456789
[long]
System.Int64
oltmish to'rt bitli tamsayΔ± (64 bit)
[long]$test = 12345678910
[single]
System.Single
suzuvchi nuqta raqami 32 bit uzunlikda
[single]$test = 12345.6789
[double]
System.Double
suzuvchi nuqta uzunligi 64 bit (8 bayt)
[double]$test = 123456789.101112
[decimal]
System.Decimal
128-bitli suzuvchi nuqta raqami (d bilan tugashi kerak)
[decimal]$test = 12345.6789d
[DateTime]
System.DateTime
sana va vaqt
$test = GetDate
[array]
System.Object[]
element indeksi 0 dan boshlanadigan massiv
$test_massiv = 1, 2, "test", 3, 4
[hashtable]
System.Collections.Hashtable
xesh-jadvallar - bu quyidagi printsipga muvofiq tuzilgan kalitlarga ega assotsiativ massivlar: @{key = "qiymat"}
$test_hashtable = @{one="bir"; ikki = "ikki"; uch = "uch"}
PowerShell yashirin turdagi konvertatsiya qilishni qo'llab-quvvatlaydi, bundan tashqari, o'zgaruvchining turini tezda o'zgartirish mumkin (masalan, tayinlash operatori yordamida), agar u majburiy ko'rsatilmagan bo'lsa - bu holda tarjimon xato qiladi. Oldingi misoldagi o'zgaruvchining turini GetType() usulini chaqirish orqali aniqlashingiz mumkin:
$test.GetType().FullName 
O'zgaruvchilarni manipulyatsiya qilish uchun bir qator cmdletlar mavjud. Ularning ro'yxati qulay shaklda buyruq yordamida ko'rsatiladi:
Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap 
E'lon qilingan o'zgaruvchilar va ularning qiymatlarini ko'rish uchun siz maxsus cmdletdan foydalanishingiz mumkin:
Get-Variable | moreBu usul haddan tashqari mashaqqatli ko'rinadi, operatorlar orqali yoki ularning xossalari va usullariga bevosita kirish orqali o'zgaruvchilar bilan ishlash ancha qulayroqdir. Biroq, cmdletlar mavjud bo'lish huquqiga ega, chunki ular ba'zi qo'shimcha parametrlarni o'rnatishga imkon beradi. Foydalanuvchi o'zgaruvchilari faqat joriy seans ichida aniqlanishini tushunish muhimdir. Konsol yopilganda yoki skript tugagach, ular o'chiriladi.
Tizim o'zgaruvchilari
Foydalanuvchi tomonidan e'lon qilinganlarga qo'shimcha ravishda, joriy sessiya tugaganidan keyin o'chirilmaydigan o'rnatilgan (tizim) o'zgaruvchilar mavjud. Ular ikki turga bo'linadi, PowerShell holati ma'lumotlari avtomatik o'zgaruvchilarda saqlanadi, ularga o'zboshimchalik bilan qiymatlarni belgilash mumkin emas. Bularga, masalan, $PWD kiradi:
$PWD.Path 
Afzallik o'zgaruvchilari foydalanuvchi imtiyozlarini saqlash uchun kerak bo'lib, ularning qiymatlari o'zgartirilishi mumkin. Misol uchun, $ErrorActionPreference dan foydalanib, buyruq tarjimonining halokatli bo'lmagan xatolar yuzaga kelishiga munosabati o'rnatiladi.
E'lon qilingan o'zgaruvchilarga kirish uchun operatorlar va cmdletlardan tashqari, o'zgaruvchi mavjud: pseudo-akkumulyator. Siz u bilan boshqa drayvlar bilan o'xshashlik bilan ishlashingiz mumkin va bu holda o'zgaruvchilar fayl tizimi ob'ektlariga o'xshaydi:
Get-ChildItem Variable: | moreyoki
ls Variable: | more 
Qo'llash sohalari
PowerShell'dagi o'zgaruvchilar uchun qamrov (Scope) tushunchasi mavjud. Global miqyosning harakati (Global) butun joriy sessiya uchun amal qiladi - u, masalan, tizim o'zgaruvchilarini o'z ichiga oladi. Mahalliy (mahalliy) o'zgaruvchilar faqat ular aniqlangan doirada mavjud: funksiya ichida ayting. Skript (skript) doirasi tushunchasi ham mavjud, ammo skript buyruqlari uchun u asosan mahalliydir. Odatiy bo'lib, o'zgaruvchilarni e'lon qilishda ularga mahalliy qamrov beriladi va buni o'zgartirish uchun sizga maxsus konstruktsiya kerak bo'ladi, masalan: $Global: o'zgaruvchi = qiymat.
Masalan, bu kabi:
$Global:test = 100
Atrof-muhit o'zgaruvchilari (atrof-muhit)
Boshqa psevdo-disk Env: PowerShell-dan mavjud va u muhit o'zgaruvchilariga kirish uchun ishlatilishi mumkin. Qobiq ishga tushganda, ular asosiy jarayondan (ya'ni joriy seansni boshlagan dasturdan) ko'chiriladi va odatda ularning boshlang'ich qiymatlari boshqaruv panelidagi qiymatlar bilan bir xil bo'ladi. Muhit o'zgaruvchilarini ko'rish uchun Get-ChildItem cmdletidan yoki uning taxalluslaridan (taxalluslaridan) foydalaning: ls va dir.
dir Env: 
Bu o'zgaruvchilar baytlar (yoki agar xohlasangiz, belgilar) ketma-ketligi bo'lib, ularning talqini faqat ulardan foydalanadigan dasturga bog'liq. *-Variable cmdletlari muhit o'zgaruvchilari bilan ishlamaydi. Ularga kirish uchun siz haydovchi prefiksidan foydalanishingiz kerak:
$env:TEST = "Hello, World!" 
Arifmetik va taqqoslash operatorlari
PowerShell quyidagi arifmetik operatorlarni taqdim etadi: + (qo'shish), - (ayirish), * (ko'paytirish), / (bo'lish) va % (modul yoki modul). Arifmetik ifodaning natijasi amallarning umumiy qabul qilingan tartibiga muvofiq chapdan oβngga qarab baholanadi va ifoda qismlarini guruhlash uchun qavslardan foydalaniladi. Operatorlar orasidagi bo'shliqlar e'tiborga olinmaydi, ular faqat tushunish qulayligi uchun ishlatiladi. + operatori ham birlashtiradi, * operatori esa satrlarni takrorlaydi. Agar siz satrga raqam qo'shishga harakat qilsangiz, u satrga aylantiriladi. Bundan tashqari, PowerShell-da ikkita qiymat o'rtasidagi moslikni sinab ko'radigan va mantiqiy "True" yoki "False" qiymatini qaytaradigan ko'plab taqqoslash operatorlari mavjud:
Operator
Tavsif
Kod misoli
-eq
Teng / Teng (boshqa tillarda = yoki == ga o'xshash)
$test = 100
$test -ekv 123
- bu
Teng emas / Teng emas (<> yoki != ga o'xshash)
$test = 100
$test -ne 123
-gt
Kattaroq / Ko'proq (analog>)
$test = 100
$test -gt 123
-yosh
Kattaroq yoki teng / Kattaroq yoki teng (>= ga o'xshash)
$test = 100
$test -ge 123
-lt
Kamroq / Kamroq (<ga o'xshash)
$test = 100
$test -lt 123
-
Kichik yoki teng / Kichik yoki teng (<= ga o'xshash)
$test = 100
$test -le 123
Boshqa shunga o'xshash operatorlar mavjud bo'lib, ular, masalan, joker belgiga asoslangan satrlarni solishtirish yoki naqshga mos kelish uchun oddiy iboralarni ishlatish imkonini beradi. Ularni keyingi maqolalarda batafsil yoritamiz. <, > va = belgilari taqqoslash uchun ishlatilmaydi, chunki ular boshqa maqsadlarda ishlatiladi.
Belgilash operatorlari
Eng keng tarqalgan = operatoridan tashqari, boshqa tayinlash operatorlari ham mavjud: +=, -=, *=, /= va %=. Ular tayinlashdan oldin qiymatni o'zgartiradilar. O'zgaruvchining qiymatini oshiruvchi yoki kamaytiruvchi ++ va - unar operatorlari xuddi shunday harakat qiladi - ular tayinlash operatorlariga ham tegishli.
Mantiqiy operatorlar
Murakkab sharoitlarni tavsiflash uchun faqat taqqoslashning o'zi etarli emas. Siz har qanday mantiqiy ifodalarni operatorlar yordamida yozishingiz mumkin: -and, -or, -xor, -not and! .. Ular boshqa dasturlash tillaridagi kabi ishlaydi, shu bilan birga siz baholash tartibini belgilash uchun qavslardan foydalanishingiz mumkin:
("Π’Π΅ΡΡ" -eq "Π’Π΅ΡΡ") -and (100 -eq 100)
-not (123 -gt 321)
!(123 -gt 321)
Shartli sakrash
PowerShell-dagi filial operatorlari standartdir: IF(IF...ELSE, IF...ELSEIF...ELSE) va SWITCH. Keling, ulardan foydalanishni misollar bilan ko'rib chiqaylik:
[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 ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ"}
}
Velosipedlar
PowerShell-da bir necha turdagi tsikllar mavjud: WHILE, DO WHILE, DO UNTIL, FOR va FOREACH.
Old shartga ega bo'lgan tsikl, agar u to'g'ri bo'lsa, ishlaydi:
[int]$test = 0
while ($test -lt 10) {
Write-Host $test
$test = $test + 1
}
Postshartli tsikllar kamida bir marta ishlaydi, chunki shart takrorlashdan keyin tekshiriladi. Shu bilan birga, DO WHILE shart rost bo'lganda ishlaydi va DO UNTIL noto'g'ri bo'lganda ishlaydi:
[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 siklining iteratsiyalar soni oldindan ma'lum:
for ([int]$test = 0; $test -lt 10; $test++) {
Write-Host $test
}
FOREACH siklida massiv yoki toβplam elementlarini takrorlaydi (xesh jadvali):
$test_collection = "item1", "item2", "item3"
foreach ($item in $test_collection)
{
Write-Host $item
}
Arrays
PowerShell o'zgaruvchilari nafaqat bitta ob'ektni (raqam, satr va boshqalar), balki bir nechta ob'ektlarni ham saqlaydi. Bunday o'zgaruvchilarning eng oddiy turi massivlardir. Massiv bir nechta elementlardan, bitta elementdan iborat bo'lishi yoki bo'sh bo'lishi mumkin, ya'ni. elementlarni o'z ichiga olmaydi. U @() operatori yordamida e'lon qilinadi, bu bizga keyingi maqolada kerak bo'ladi - massivga boshqa massivlarni qo'shish (ko'p o'lchovli massivlarni yaratish), massivlarni argument sifatida funktsiyalarga o'tkazish va shunga o'xshash vazifalar uchun juda muhimdir:
$test_array = @() #ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²Massiv ishga tushirilganda uning qiymatlari vergul bilan ajratiladi (maxsus operator ,):
$test_array = @(1, 2, 3, 4) # ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Ko'pgina hollarda @() operatori o'tkazib yuborilishi mumkin:
$test_array = 1, 2, 3, 4Bu holda bitta elementdan iborat massiv quyidagicha inisializatsiya qilinadi
$test_array = , 1Massiv elementlariga kirish nolga asoslangan butun son indeksi va indeks operatori (kvadrat qavs) yordamida amalga oshiriladi:
$test_array[0] = 1Vergul bilan ajratilgan bir nechta indekslarni belgilashingiz mumkin, jumladan. takrorlanuvchi:
$test_array = "ΠΎΠ΄ΠΈΠ½", "Π΄Π²Π°", "ΡΡΠΈ", "ΡΠ΅ΡΡΡΠ΅"
$test_array[0,1,2,3]
$test_array[1,1,3,3,0] 
Operator .. (ikki nuqta - diapazon operatori) belgilangan yuqori va pastki chegaralar ichida butun sonlar qatorini qaytaradi. Masalan, 1..4 ifoda toβrt elementli @(1, 2, 3, 4) massivni, 8..5 ifodasi esa @(8, 7, 6, 5) massivni chiqaradi.

Diapazon operatoridan foydalanib, siz massivni ishga tushirishingiz mumkin ($test_array = 1..4) yoki tilim (bo'lak) olishingiz mumkin, ya'ni. bir massivning boshqasi indekslari bilan elementlar ketma-ketligi. Bunday holda, salbiy raqam -1 massivning oxirgi elementini, -2 - oxirgidan oldingi elementni va hokazo.
$test_array = "ΠΎΠ΄ΠΈΠ½", "Π΄Π²Π°", "ΡΡΠΈ", "ΡΠ΅ΡΡΡΠ΅"
$test_array[0..2]
$test_array[2..0]
$test_array[-1..0]
$test_array[-2..1]Esda tutingki, butun qator qiymatlari ma'lumotlar massivining maksimal indeks qiymatidan katta bo'lishi mumkin. Bunday holda, barcha qiymatlar oxirgisiga qaytariladi:
$test_array[0..100]Agar bitta mavjud bo'lmagan massiv elementiga kirishga harakat qilsangiz, $null qaytariladi.

PowerShell-da massivlar har xil turdagi elementlarni o'z ichiga olishi yoki kuchli tarzda yozilishi mumkin:
$test_array = 1, 2, "ΡΠ΅ΡΡ", 3, 4
for ([int]$i = 0; $i -lt $test_array.count; $i++)
{
Write-Host $test_array[$i]
}
Bu yerda $test_array.count xossasi massiv elementlari soni.
Kuchli yozilgan massivni yaratishga misol:
[int[]]$test_array = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Xesh jadvallari
PowerShell tilidagi o'zgaruvchilarning yana bir asosiy turi bu assotsiativ massivlar sifatida ham tanilgan xesh-jadvallardir. Hashtablelar JSON obyektlariga o'xshaydi va kalit-qiymat asosida qurilgan. Oddiy massivlardan farqli o'laroq, ularning elementlariga ob'ektning xossalari bo'lgan nomli kalitlar orqali kirish mumkin (siz indeks operatoridan ham foydalanish mumkin - kvadrat qavslar).
Bo'sh xesh-jadval @ belgisi va operator qavslari yordamida e'lon qilinadi:
$test_hashtable = @{}Deklaratsiya qilishda siz darhol kalitlarni yaratishingiz va ularga qiymatlarni belgilashingiz mumkin:
$test_hashtable = @{one="ΠΎΠ΄ΠΈΠ½"; two="Π΄Π²Π°"; three="ΡΡΠΈ"; "some key"="some value"}Xesh-jadvalga element qo'shish uchun siz unga hali mavjud bo'lmagan kalitni belgilashingiz yoki Add () usulidan foydalanishingiz kerak. Agar mavjud kalitga topshiriq berilsa, uning qiymati o'zgaradi. Remove() usuli xesh-jadvaldan elementni olib tashlash uchun ishlatiladi.
$test_hashtable."some key"
$test_hashtable["some key"]
$test_hashtable.Add("four", "ΡΠ΅ΡΡΡΠ΅")
$test_hashtable.five = "ΠΏΡΡΡ"
$test_hashtable['five'] = "Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅"
$test_hashtable.Remove("one") 
Ushbu turdagi o'zgaruvchilar funktsiyalar va cmdletlarga argument sifatida berilishi mumkin - keyingi maqolada biz bu qanday amalga oshirilishini o'rganamiz, shuningdek, shunga o'xshash boshqa turdagi - PSCustomObject ni ko'rib chiqamiz.
Xususiyatlari:
PowerShell protsessual dasturlash uchun kerak bo'lgan hamma narsaga, jumladan funktsiyalarga ega. Ularni tavsiflash uchun Function funktsiya so'zi qo'llaniladi, undan so'ng operator qavslari ichiga olingan funktsiya nomini va tanasini ko'rsatish kerak. Agar siz funktsiyaga argumentlarni yuborishingiz kerak bo'lsa, ularni darhol qavs ichidagi nomdan keyin ko'rsatishingiz mumkin.
function ΠΈΠΌΡ-ΡΡΠ½ΠΊΡΠΈΠΈ (Π°ΡΠ³ΡΠΌΠ΅Π½Ρ1, ..., Π°ΡΠ³ΡΠΌΠ΅Π½ΡN)
{
ΡΠ΅Π»ΠΎ-ΡΡΠ½ΠΊΡΠΈΠΈ
}
Funktsiya har doim natijani qaytaradi - agar bir nechta bo'lsa, bu uning barcha bayonotlari natijalarining massivi. Agar faqat bitta bayonot bo'lsa, tegishli turdagi yagona qiymat qaytariladi. Qaytish $value konstruktsiyasi natija massiviga $value qiymatiga ega elementni qo'shadi va bayonotlar ro'yxatining bajarilishini to'xtatadi va bo'sh funksiya $null qiymatini qaytaradi.
Masalan, sonni kvadratga solish funksiyasini yaratamiz:
function sqr ($number)
{
return $number * $number
}
E'tibor bering, funktsiyaning tanasida siz uni chaqirishdan oldin e'lon qilingan har qanday o'zgaruvchilardan foydalanishingiz mumkin va PowerShell-da funksiyalarni chaqirish g'ayrioddiy ko'rinishi mumkin: argumentlar (agar mavjud bo'lsa) qavslar ichiga olinmaydi va bo'shliqlar bilan ajratiladi.
sqr 2yoki shunga o'xshash:
sqr -number 2Argumentlarni uzatish usuli tufayli funktsiyaning o'zi ba'zan qavs ichiga olinishi kerak:
function test_func ($n) {}
test_func -eq $null # ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π»Π°ΡΡ
(test_func) -eq $null # ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ β $true 
Funktsiyani tavsiflashda siz argumentlarga standart qiymatlarni belgilashingiz mumkin:
function func ($arg = value) {
#ΡΠ΅Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ
}
Funktsiya argumentlarini tavsiflash uchun yana bir sintaksis mavjud, bunga qo'shimcha ravishda parametrlarni quvur liniyasidan o'qish mumkin - bularning barchasi keyingi maqolada, eksport qilingan modullarni ko'rib chiqishda va o'z cmdletlarimizni yaratishda foydali bo'ladi.
Qayta ishlashda xatolik
PowerShell-da istisnolarni boshqarish uchun Try...Catch...Nihoyat mexanizmi mavjud. Try blokida xatolik yuzaga kelishi mumkin bo'lgan kod, Catch blokida esa uning ishlov beruvchisi mavjud. Agar xato bo'lmasa, u bajarilmaydi. Finally bloki Try blokidan keyin, xatolik yuzaga kelishidan qat'iy nazar bajariladi va har xil turdagi istisnolar uchun bir nechta Catch bloklari bo'lishi mumkin. Istisnoning o'zi e'lon qilinmagan standart o'zgaruvchiga ($_) yoziladi va uni osongina olish mumkin. Quyidagi misolda biz noto'g'ri qiymat kiritishdan himoya qilamiz:
try {
[int]$test = Read-Host "ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠΈΡΠ»ΠΎ"
100 / $test
} catch {
Write-Warning "ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ"
Write-Host $_
}

Bu PowerShell tilida dasturlash asoslarini ko'rib chiqishni yakunlaydi. Keyingi maqolalarda biz har xil turdagi o'zgaruvchilar, to'plamlar, muntazam ifodalar bilan ishlash, funktsiyalar, modullar va moslashtirilgan cmdletlarni yaratish, shuningdek, ob'ektga yo'naltirilgan dasturlashni batafsil o'rganamiz.
Manba: www.habr.com
