Sacara historis, utilitas baris perintah ing sistem Unix luwih maju tinimbang ing WindowsNanging, kanthi anane solusi anyar, kahanane owah.
PowerShell ngijini sampeyan nulis skrip ing basa multi-paradigma sing diinterpretasikake sing nduweni unsur prosedural klasik, berorientasi obyek, lan malah program fungsional: percabangan kondisional, loop, variabel, array, tabel hash, kelas, penanganan kesalahan, uga fungsi, cmdlet, lan pipa. iki pengabdian kanggo dhasar makarya ing lingkungan, lan saiki kita kurban maca buku referensi cilik kanggo programer.
Gamelan:
Sampeyan bisa nulis kode ing editor teks apa wae utawa nggunakake lingkungan pangembangan terintegrasi - cara paling gampang yaiku njupuk Windows PowerShell ISE, sing digabungake karo sistem operasi server Microsoft. Iki mung perlu kanggo skrip sing cukup rumit: set printah cendhak luwih gampang dieksekusi kanthi interaktif.
komentar
Nggunakake komentar dianggep minangka bagéan saka gaya pemrograman sing apik, bebarengan karo indentasi lan spasi sing tepat:
# Для строчных комментариев используется символ решетки — содержимое строки интерпретатор не обрабатывает.
<#
Так обозначаются начало и конец блочного комментария.
Заключенный между ними текст интерпретатор игнорирует.
#>
Variabel lan jinise
Variabel ing PowerShell diarani obyek. Jeneng kasebut bisa kalebu garis ngisor, uga huruf lan angka. Jeneng kasebut tansah didhisiki simbol $, lan kanggo mratelakake variabel, sampeyan mung kudu menehi jeneng sing bener marang juru:

Kanggo miwiti variabel (menehi nilai), operator penugasan (simbol =) digunakake:
$test = 100Sampeyan bisa ngumumake variabel kanthi nemtokake jinise ing tanda kurung (operator jinis casting) sadurunge jeneng utawa nilai:
[int]$test = 100
$test = [int]100Penting kanggo mangerteni yen variabel ing PowerShell minangka obyek lengkap (kelas) kanthi sifat lan metode, jinise adhedhasar sing ana ing .NET Core. Ayo dhaptar sing utama:
Tipe (kelas .NET)
Description
Tuladha kode
[senar]
Sistem.String
String Unicode
$test = "tes"
$test = 'tes'
[karakter]
Karakter Sistem
Karakter Unicode (16 bit)
[char]$test = 'c'
[bool]
Sistem.Boolean
jinis boolean (nilai logis True or False)
[bool]$test = $true
[int]
Sistem.Int32
telung puluh loro-bit integer (32 bit)
[int]$test = 123456789
[dawa]
Sistem.Int64
sewidak papat-bit integer (64 bit)
[long]$test = 12345678910
[tunggal]
Sistem.Tunggal
Nomer floating point 32-bit
[siji]$test = 12345.6789
[dobel]
Sistem.Dobel
Nomer floating point 64-bit (8-byte).
[pindho]$test = 123456789.101112
[desimal]
Sistem.Desimal
Nomer floating point 128-bit (mbutuhake d ing pungkasan)
[desimal]$test = 12345.6789d
[TanggalWektu]
Sistem.TanggalWektu
tanggal lan wektu
$test = Get-Date
[susunan]
Sistem.Objek[]
array sing indeks unsur diwiwiti saka 0
$test_array = 1, 2, "test", 3, 4
[tabel hash]
Koleksi.Sistem.Hashtable.
tabel hash minangka susunan asosiatif kanthi tombol sing dijenengi, dibangun miturut prinsip: @{key = "nilai"}
$test_hashtable = @{one="siji"; loro = "loro"; telu = "telu"}
PowerShell ndhukung konversi jinis implisit, lan jinis variabel bisa diganti kanthi cepet (contone, nggunakake operator penugasan) yen ora ditemtokake kanthi paksa - ing kasus iki, juru bakal ngasilake kesalahan. Sampeyan bisa nemtokake jinis variabel saka conto sadurunge kanthi nelpon metode GetType():
$test.GetType().FullName 
Ana sawetara cmdlet kanggo ngatur variabel. Dhaptar kasebut ing wangun sing trep ditampilake kanthi nggunakake printah:
Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap 
Kanggo ndeleng variabel sing diumumake lan nilai, sampeyan bisa nggunakake cmdlet khusus:
Get-Variable | moreCara iki katon banget rumit; luwih trep kanggo nggarap variabel liwat operator utawa kanthi ngakses properti lan cara langsung. Nanging, cmdlet duwe hak kanggo ana, amarga ngidini sampeyan nyetel sawetara paramèter tambahan. Penting kanggo mangerteni yen variabel pangguna ditetepake mung ing sesi saiki. Sawise nutup console utawa ngrampungake script, padha dibusak.
Variabel sistem
Saliyane sing diumumake dening pangguna, ana variabel dibangun (sistem) sing ora dibusak sawise sesi saiki rampung. Iki dipérang dadi rong jinis, kanthi data negara PowerShell sing disimpen ing variabel otomatis sing ora bisa diwenehi nilai sewenang-wenang. Iki kalebu, contone, $PWD:
$PWD.Path 
Variabel preferensi dibutuhake kanggo nyimpen setelan pangguna, nilai sing bisa diganti. Contone, $ErrorActionPreference digunakake kanggo nyetel reaksi interpreter printah kanggo kasalahan non-kritis.
Saliyane operator lan cmdlet kanggo ngakses variabel sing diumumake, ana Variabel pseudo-drive:. Sampeyan bisa nggarap kanthi cara sing padha karo drive liyane, lan variabel ing kasus iki meh padha karo obyek sistem file:
Get-ChildItem Variable: | moreutawa
ls Variable: | more 
Lingkup visibilitas
Ana konsep ruang lingkup kanggo variabel ing PowerShell. Ruang lingkup Global ditrapake kanggo kabeh sesi saiki - kalebu, contone, variabel sistem. Variabel lokal mung kasedhiya ing orane katrangan ngendi padha ditetepake: ngomong, nang fungsi. Ana uga konsep ruang lingkup script, nanging kanggo printah script iku ateges lokal. Kanthi gawan, nalika variabel ngumumaké, padha diutus orane katrangan lokal, lan kanggo ngganti iki, sampeyan kudu construction khusus saka wangun: $ Global: variabel = Nilai.
Contone, kaya iki:
$Global:test = 100
Variabel lingkungan
Driver pseudo liyane, Env:, kasedhiya saka PowerShell, sing ngidini sampeyan ngakses variabel lingkungan. Nalika cangkang diwiwiti, disalin saka proses induk (yaiku, saka program sing miwiti sesi saiki) lan biasane nilai awal padha karo nilai ing panel kontrol. Kanggo ndeleng variabel lingkungan, gunakake cmdlet Get-ChildItem utawa alias: ls lan dir.
dir Env: 
Variabel kasebut minangka urutan bita (utawa karakter, yen sampeyan seneng) sing interpretasi gumantung saka program sing digunakake. Cmdlet *-Variabel ora bisa digunakake karo variabel lingkungan. Kanggo ngakses, sampeyan kudu nggunakake awalan drive:
$env:TEST = "Hello, World!" 
Operator aritmetika lan perbandingan
PowerShell nduweni operator aritmatika ing ngisor iki: + (tambahan), - (pengurangan), * (perkalian), / (divisi), lan % (modulus, utawa sisa). Asil ekspresi aritmatika dievaluasi saka kiwa menyang tengen miturut urutan operasi konvensional, lan kurung digunakake kanggo ngelompokake bagean saka ekspresi kasebut. Spasi ing antarane operator ora digatekake lan mung digunakake kanggo maca. Operator + uga nggabungake, lan operator * mbaleni senar. Yen sampeyan nyoba kanggo nambah nomer kanggo senar, iku bakal diowahi kanggo senar. PowerShell uga duwe macem-macem operator perbandingan sing mbandhingake rong nilai lan ngasilake True utawa False logis:
Operator
Description
Tuladha kode
-eq
Equal / Equal (analog karo = utawa == ing basa liya)
$test = 100
$test -eq 123
- punika
Ora padha / Ora padha (analog karo <> utawa !=)
$test = 100
$test -ne 123
-gt
Luwih saka / Большое (analog >)
$test = 100
$test -gt 123
-ge
Luwih saka utawa padha / Luwih saka utawa padha (analog >=)
$test = 100
$test -ge 123
-lt
Kurang saka / Kurang (analog <)
$test = 100
$test -lt 123
-sing
Kurang saka utawa padha / Kurang saka utawa padha (analog <=)
$test = 100
$test -le 123
Ana operator liyane padha sing ngidini, contone, mbandhingaké strings njupuk menyang akun karakter wildcard utawa nggunakake ekspresi biasa kanggo nelusuri match pola. Kita bakal nimbang kanthi rinci ing artikel ing ngisor iki. Simbol <, > lan = ora digunakake kanggo mbandhingake, amarga digunakake kanggo tujuan liyane.
Operator tugas
Saliyane operator paling umum =, ana operator penugasan liyane: +=, -=, *=, /=, lan %=. Padha ngganti nilai sadurunge assignment. Operator unary ++ lan —, sing nambah utawa nyuda nilai variabel, tumindak sing padha; padha uga dadi operator assignment.
Operator logika
Kanggo njlèntrèhaké kahanan rumit, comparison mung ora cukup. Ekspresi logis bisa ditulis nganggo operator: -lan, -utawa, -xor, -ora lan!.
("Тест" -eq "Тест") -and (100 -eq 100)
-not (123 -gt 321)
!(123 -gt 321)
Langsung kondisional
Operator cabang ing PowerShell standar: IF(IF…ELSE, IF…ELSEIF…ELSE) lan SWITCH. Ayo goleki panggunaane kanthi conto:
[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 или значение не определено"}
}
Siklus
Ana sawetara jinis puteran ing PowerShell: WHILE, DO WHILE, DO UNTIL, FOR, lan FOREACH.
Daur ulang kanthi prasyarat bisa digunakake yen / nalika prasyarat bener:
[int]$test = 0
while ($test -lt 10) {
Write-Host $test
$test = $test + 1
}
Loops karo postcondition bakal bisa ing paling sapisan, amarga kondisi wis dicenthang sawise iterasi rampung. Ing kasus iki, DO WHILE dianggo nalika kondisi bener, lan DO UNTIL dianggo nalika iku salah:
[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)
Jumlah iterasi saka loop FOR dikenal luwih dhisik:
for ([int]$test = 0; $test -lt 10; $test++) {
Write-Host $test
}
The FOREACH loop iterates liwat unsur array utawa koleksi (tabel hash):
$test_collection = "item1", "item2", "item3"
foreach ($item in $test_collection)
{
Write-Host $item
}
Susunan
Variabel PowerShell ora mung nyimpen obyek siji (nomer, string, lsp), nanging uga akeh obyek. Jinis paling gampang saka variabel kasebut yaiku array. Array bisa dumadi saka sawetara unsur, siji unsur, utawa kosong, yaiku ora ana unsur. Kanggo ngumumake, operator @() digunakake, sing bakal dibutuhake ing artikel sabanjure - penting banget kanggo nambah array liyane menyang array (nggawe array multidimensi), ngliwati array menyang fungsi minangka argumen, lan tugas sing padha:
$test_array = @() #создаем пустой массивNalika nginisialisasi array, nilai-nilai kasebut kadhaptar kanthi koma (operator khusus ,):
$test_array = @(1, 2, 3, 4) # создаем массив из четырех элементов Umume kasus, operator @() bisa diilangi:
$test_array = 1, 2, 3, 4Ing kasus iki, array saka siji unsur diinisialisasi kaya ing ngisor iki
$test_array = , 1Kanggo ngakses elemen array, gunakake indeks integer basis nol lan operator indeks (kurung persegi):
$test_array[0] = 1Sampeyan bisa nemtokake sawetara indeks sing dipisahake karo koma, kalebu sing mbaleni:
$test_array = "один", "два", "три", "четыре"
$test_array[0,1,2,3]
$test_array[1,1,3,3,0] 
Operator .. (loro titik - operator jangkoan) ngasilake array integer ing babagan sing ditemtokake dening wates ndhuwur lan ngisor. Contone, ekspresi 1..4 ngasilake array papat unsur @(1, 2, 3, 4), lan ekspresi 8..5 ngasilake array @(8, 7, 6, 5).

Nggunakake operator kisaran, sampeyan bisa miwiti array ($test_array = 1..4) utawa entuk irisan, yaiku urutan unsur saka siji array kanthi indeks saka liyane. Ing kasus iki, angka negatif -1 nuduhake unsur pungkasan saka array, -2 - penultimate, etc.
$test_array = "один", "два", "три", "четыре"
$test_array[0..2]
$test_array[2..0]
$test_array[-1..0]
$test_array[-2..1]Elinga yen nilai array integer bisa luwih gedhe tinimbang nilai indeks maksimum array data. Ing kasus iki, kabeh nilai nganti pungkasan bakal bali:
$test_array[0..100]Yen sampeyan nyoba ngakses unsur tunggal sing ora ana ing array, nilai $ null bali.

Ing PowerShell, array bisa ngemot unsur saka macem-macem jinis utawa diketik banget:
$test_array = 1, 2, "тест", 3, 4
for ([int]$i = 0; $i -lt $test_array.count; $i++)
{
Write-Host $test_array[$i]
}
Where $ test_array.count property nomer unsur ing Uploaded.
Conto nggawe array sing diketik banget:
[int[]]$test_array = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Tabel hash
Jinis variabel dhasar liyane ing basa PowerShell yaiku tabel hash, uga disebut array asosiatif. Hashtables padha karo obyek JSON lan dibangun ing prinsip kunci-nilai. Boten kados susunan biasa, unsur-unsuripun dipunakses kanthi tombol ingkang dipunjenengi, inggih punika sifat-sifat obyek (sampeyan uga bisa nggunakake operator indeks - kurung persegi).
Tabel hash kosong diumumake nggunakake simbol @ lan kurung operator:
$test_hashtable = @{}Nalika ngumumake, sampeyan bisa langsung nggawe kunci lan nemtokake nilai kasebut:
$test_hashtable = @{one="один"; two="два"; three="три"; "some key"="some value"}Kanggo nambah unsur menyang tabel hash, sampeyan kudu nemtokake tombol sing durung ana utawa nggunakake Add () cara. Yen tugas digawe nganggo kunci sing wis ana, regane bakal diganti. Kanggo mbusak unsur saka tabel hash, nggunakake Copot () cara.
$test_hashtable."some key"
$test_hashtable["some key"]
$test_hashtable.Add("four", "четыре")
$test_hashtable.five = "пять"
$test_hashtable['five'] = "заменяем значение"
$test_hashtable.Remove("one") 
Variabel saka jinis iki bisa diterusake minangka argumen kanggo fungsi lan cmdlet - ing artikel sabanjure kita bakal sinau carane nindakake iki, lan uga nimbang jinis liyane sing padha - PSCustomObject.
Fungsi
PowerShell nduweni kabeh unsur sing dibutuhake kanggo program prosedural, kalebu fungsi. Kanggo njlèntrèhaké, gunakake tembung layanan Fungsi, banjur jeneng fungsi lan awak sing ana ing kurung operator. Yen sampeyan kudu ngirim argumen menyang fungsi kasebut, sampeyan bisa nemtokake langsung sawise jeneng ing kurung.
function имя-функции (аргумент1, ..., аргументN)
{
тело-функции
}
Fungsi kasebut tansah ngasilake asil, yaiku array saka asil kabeh statement yen ana luwih saka siji. Yen mung ana siji statement, nilai siji saka jinis cocog bali. Wangun $value bali nambahake unsur kanthi nilai $nilai menyang array asil lan mungkasi eksekusi dhaptar statement, lan fungsi kosong ngasilake $ null.
Minangka conto, ayo nggawe fungsi kanggo kuadrat nomer:
function sqr ($number)
{
return $number * $number
}
Elinga yen sampeyan bisa nggunakake variabel apa wae sing diumumake sadurunge nelpon fungsi kasebut ing awak fungsi, lan fungsi nelpon ing PowerShell bisa uga katon ora biasa: argumen (yen ana) ora diapit ing kurung lan dipisahake dening spasi.
sqr 2utawa supaya:
sqr -number 2Amarga cara argumen diterusake, fungsi kasebut kadhangkala kudu dilampirake ing kurung:
function test_func ($n) {}
test_func -eq $null # функция не вызывалась
(test_func) -eq $null # результат выражения — $true 
Nalika njlentrehake fungsi, sampeyan bisa nemtokake nilai standar kanggo argumen:
function func ($arg = value) {
#тело функции
}
Ana uga sintaks liyane kanggo njlentrehake argumen fungsi, lan paramèter bisa diwaca saka pipa - kabeh iki bakal migunani ing artikel sabanjure, nalika ndeleng modul sing diekspor lan nggawe cmdlet dhewe.
Kasalahan pangolahan
PowerShell duwe mekanisme Coba…Catch…Pungkasane sing ngidini sampeyan nangani kahanan sing luar biasa. Blok Coba ngemot kode sing bisa nyebabake kesalahan, lan blok Catch ngemot panangane. Yen ora ana kesalahan, ora dieksekusi. Pamblokiran Akhire dileksanakake sawise pamblokiran Coba preduli saka apa ana kesalahan, lan ana bisa sawetara pamblokiran Catch kanggo pangecualian saka macem-macem jinis. Pangecualian kasebut dhewe ditulis ing variabel standar ($_) sing ora mbutuhake deklarasi lan bisa gampang dijupuk. Ing conto ing ngisor iki, kita ngetrapake proteksi supaya ora nglebokake nilai sing salah:
try {
[int]$test = Read-Host "Введите число"
100 / $test
} catch {
Write-Warning "Некорректное число"
Write-Host $_
}

Iki mungkasi diskusi kita babagan dhasar pemrograman ing PowerShell. Ing artikel ing ngisor iki, kita bakal nliti babagan nggarap variabel saka macem-macem jinis, koleksi, ekspresi reguler, nggawe fungsi, modul, lan cmdlet khusus, uga pemrograman berorientasi obyek.
Source: www.habr.com
