naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Sacara historis, utilitas baris paréntah dina sistem Unix langkung maju tibatan dina WindowsNanging, kalayan munculna solusi énggal, kaayaan éta robih.

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

PowerShell tiasa skrip dina basa multi-paradigma anu diinterpretasikeun anu ngagaduhan unsur prosedural klasik, berorientasi obyék, sareng program fungsional: branching kondisional, loop, variabel, arrays, tabel hash, kelas, penanganan kasalahan, ogé fungsi, cmdlet, sarta pipelines. artikel saméméhna ieu devoted kana dasar gawé di lingkungan, sarta ayeuna urang nawiskeun pamiarsa urang buku rujukan leutik pikeun programer.

Catetan:

koméntar
Variabel sareng jinisna
Variabel Sistim
Lingkup
Variabel lingkungan (lingkungan)
Arithmetic jeung operator ngabandingkeun
Operator tugas
Operator logis
Luncat kondisional
Siklus
Asép
méja Hash
fungsi
Kasalahan ngolah

Anjeun tiasa nyerat kode dina éditor téks naon waé atanapi nganggo lingkungan pamekaran anu terintegrasi - cara anu paling gampang nyaéta nyandak Windows PowerShell ISE, anu dibundel sareng sistem operasi server Microsoft. Ieu ngan diperyogikeun pikeun skrip anu lumayan rumit: sakumpulan paréntah anu pondok langkung gampang dieksekusi sacara interaktif.

koméntar

Nganggo koméntar dianggap bagian tina gaya pemrograman anu saé sareng indentation sareng spasi bodas anu leres:

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

<# 

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

#>

Variabel sareng jinisna

Variabel dina PowerShell ngaranna objék. Ngaran maranéhanana bisa ngawengku karakter underscore, kitu ogé hurup jeung angka. Simbol $ sok dianggo sateuacan nami, sareng pikeun nyatakeun variabel, cekap masihan juru nami anu sah:

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Pikeun initialize variabel (napelkeun nilai ka dinya), operator ngerjakeun (simbol =) dipaké:

$test = 100

Anjeun tiasa ngadéklarasikeun variabel ku netepkeun jinisna dina kurung kuadrat (tipe operator casting) sateuacan nami atanapi nilai:

[int]$test = 100

$test = [int]100

Kadé ngartos yén variabel dina PowerShell mangrupakeun objék full-fledged (kelas) mibanda sipat jeung métode anu jenis dumasar kana pamadegan di .NET Core. Urang daptar nu utama:

Jenis (kelas .NET)

gambaran

Conto Kode

[string]
System.String

Unicode string 

$test = "uji"
$tes = 'tés'

[karakter]
System.Char

Karakter Unicode (16 bit)

[char]$tés = 'c'

[bool]
Sistem.Boolean

tipe boolean (boolean True or False)

[bool]$tés = $leres

[int]
System.Int32

tilu puluh dua bit integer (32 bit)

[int]$tés = 123456789

[panjang]
System.Int64

genep puluh opat bit integer (64 bit)

[panjang]$tés = 12345678910

[tunggal]
Sistem.Tunggal

floating point angka 32 bit panjangna

[hiji]$tés = 12345.6789

[ganda]
Sistem.Ganda

Jumlah floating point panjangna 64 bit (8 byte)

[ganda]$tés = 123456789.101112

[desimal]
Sistem.Desimal

128-bit angka floating point (diperlukeun pikeun ditungtungan ku d)

[desimal]$tés = 12345.6789d

[TanggalWaktos]
Sistem.TanggalWaktos

tanggal jeung waktu 

$test = GetDate

[susunan]
Sistem.Objék[]

Asép Sunandar Sunarya anu indéks unsur dimimitian dina 0

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

[hashtable]
Sistem.Kumpulan.Hashtable

Hash tabel nyaéta arrays associative kalawan konci ngaranna, diwangun nurutkeun prinsip: @{key = "nilai"}

$test_hashtable = @{hiji = "hiji"; dua = "dua"; tilu="tilu"}

PowerShell ngadukung konversi tipe implisit, salian ti éta, jinis variabel tiasa dirobih ku laleur (contona, nganggo operator ngerjakeun), upami henteu ditetepkeun sacara paksa - dina hal ieu, juru bakal masihan kasalahan. Anjeun tiasa nangtukeun jinis variabel tina conto samemehna ku cara nyauran metode GetType() :

$test.GetType().FullName

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Aya sababaraha cmdlet pikeun manipulasi variabel. Daptar maranéhanana dina formulir merenah dipintonkeun maké paréntah:

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

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Pikeun ningali variabel anu dinyatakeun sareng nilaina, anjeun tiasa nganggo cmdlet khusus:

Get-Variable | more

Metoda ieu sigana overly bagong, éta leuwih merenah pikeun digawekeun ku variabel ngaliwatan operator atawa ku ngakses sipat jeung métode maranéhanana langsung. Nanging, cmdlet ngagaduhan hak pikeun aya sabab ngamungkinkeun anjeun nyetél sababaraha parameter tambahan. Penting pikeun ngarti yén variabel pangguna ngan ukur ditetepkeun dina sési ayeuna. Nalika konsol ditutup atanapi naskah réngsé, aranjeunna dihapus.

Variabel Sistim

Salian anu dinyatakeun ku pangguna, aya variabel anu diwangun (sistem) anu henteu dihapus saatos sési ayeuna réngsé. Aranjeunna dibagi kana dua jinis, sedengkeun data kaayaan PowerShell disimpen dina variabel otomatis anu henteu tiasa dipasihkeun nilai sawenang-wenang sorangan. Ieu kalebet, contona, $PWD:

$PWD.Path

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Variabel preferensi diperlukeun pikeun nyimpen preferensi pamaké, nilai nu bisa dirobah. Contona, ngagunakeun $ErrorActionPreference, réaksi juru paréntah pikeun lumangsungna kasalahan non-fatal diatur.

Salian operator sareng cmdlet pikeun ngakses variabel anu dinyatakeun, aya Variabel: pseudo-accumulator. Anjeun tiasa damel sareng éta ku analogi sareng drive sanés, sareng variabel dina hal ieu nyarupaan objék sistem file:

Get-ChildItem Variable: | more

atawa

ls Variable: | more

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Lingkup

Pikeun variabel dina PowerShell, aya konsép wengkuan (Scope). Peta lingkup global (Global) manglaku ka sakabéh sési ayeuna - kaasup, contona, variabel sistem. Lokal (Lokal) variabel anu sadia ngan dina wengkuan mana maranéhanana diartikeun: sebutkeun di jero hiji fungsi. Aya ogé konsép ruang lingkup naskah (Naskah), tapi pikeun paréntah naskah, dasarna lokal. Sacara standar, nalika nyatakeun variabel, aranjeunna dibéré wengkuan lokal, sareng pikeun ngarobih ieu, anjeun peryogi konstruksi khusus sapertos: $ Global: variabel = nilai.

Contona, saperti kieu:

$Global:test = 100

Variabel lingkungan (lingkungan)

Pseudo-drive anu sanés, Env:, sayogi ti PowerShell sareng tiasa dianggo pikeun ngaksés variabel lingkungan. Nalika cangkang dimimitian, aranjeunna disalin ti prosés indungna (nyaéta, tina program anu ngamimitian sési ayeuna) sareng biasana nilai awalna sami sareng nilai dina panel kontrol. Pikeun ningali variabel lingkungan, nganggo Get-ChildItem cmdlet atanapi aliases na (alias): ls sareng dir.

dir Env:

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Variabel ieu mangrupikeun sekuen bait (atanapi karakter, upami anjeun resep), interpretasi anu ngan ukur gumantung kana program anu ngagunakeunana. Cmdlet *-Variable teu tiasa dianggo sareng variabel lingkungan. Pikeun ngaksés éta, anjeun kedah nganggo awalan drive:

$env:TEST = "Hello, World!"

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Arithmetic jeung operator ngabandingkeun

PowerShell nyayogikeun operator aritmatika ieu: + (tambahan), - (pangurangan), * (kalikeun), / (divisi), sareng % (modulo atanapi modulo). Hasil éksprési aritmatika dievaluasi ti kénca ka katuhu luyu jeung urutan operasi anu ditarima sacara umum, sarta kurung dipaké pikeun ngagolongkeun bagian-bagian éksprési. Spasi antara operator teu dipaliré, aranjeunna dipaké ukur pikeun nyieun leuwih gampang maca. Operator + ogé ngagabung, sareng operator * ngulang senar. Upami anjeun nyobian nambihan nomer kana senar, éta bakal dirobih janten senar. Salaku tambahan, basa PowerShell gaduh seueur operator ngabandingkeun anu mariksa patandingan antara dua nilai sareng ngabalikeun boolean True or False:

Operator

gambaran

Conto Kode

-sarua

Sarua / Sarua (sarua jeung = atawa == dina basa séjén)

$uji = 100
$test -eq 123 

-teu

Teu sarua / Teu sarua (sarupa <> atawa !=)

$uji = 100
$test -ne 123   

-gt

Leuwih ti / Leuwih (analog>)

$uji = 100
$test -gt 123

-ge

Leuwih gede atawa sarua / Leuwih gede atawa sarua (sarupa >=)

$uji = 100
$test -ge 123

-lt

Kurang ti / Kurang (sarupa jeung <)

$uji = 100
$test -lt 123  

-anu

Kurang atawa sarua / Kurang atawa sarua (sarupa <=)

$uji = 100
$uji -le 123

Aya operator sarupa séjén nu ngidinan Anjeun pikeun, contona, ngabandingkeun string dumasar kana wildcard atawa ngagunakeun éksprési biasa pikeun cocog pola. Urang bakal nutupan aranjeunna sacara rinci dina tulisan anu bakal datang. Simbol <, > jeung = henteu dipaké pikeun babandingan sabab dipaké pikeun tujuan séjén.

Operator tugas

Salian operator = paling umum, aya operator ngerjakeun séjén: +=, -=, *=, /= jeung %=. Aranjeunna ngarobah nilai saméméh ngerjakeun. Operator unary ++ sareng -, anu ningkatkeun atanapi ngirangan nilai variabel, kalakuanana sami - aranjeunna ogé dilarapkeun ka operator ngerjakeun.

Operator logis

Babandingan wungkul teu cukup pikeun ngajelaskeun kaayaan kompléks. Anjeun tiasa nyerat éksprési logis nganggo operator: -and, -or, -xor, -not and!

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

-not (123 -gt 321) 

!(123 -gt 321)

Luncat kondisional

Operator cabang dina PowerShell standar: IF(IF…ELSE, IF…ELSEIF…ELSE) jeung SWITCH. Hayu urang nempo pamakéan maranéhanana kalayan 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

PowerShell ngagaduhan sababaraha jinis loop: WHILE, DO WHILE, DO UNTIL, FOR, sareng FOREACH.

A loop kalawan precondition a jalan lamun / salami éta leres:

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

Loop kalawan postcondition bakal ngajalankeun sahenteuna sakali, sabab kaayaan dipariksa sanggeus iteration nu. Dina waktos anu sami, DO WHILE dianggo nalika kaayaan leres, sareng DO UNTIL tiasa dianggo nalika éta palsu:

[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 tina loop FOR dipikanyaho sateuacanna:

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

Dina loop FOREACH, iterates leuwih elemen hiji Asép Sunandar Sunarya atawa kumpulan (hash tabel):

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

Asép

Variabel PowerShell nyimpen henteu ngan ukur objék tunggal (nomer, string, jsb), tapi ogé sababaraha. Jenis pangbasajanna variabel sapertos nyaéta arrays. Hiji Asép Sunandar Sunarya bisa diwangun ku sababaraha elemen, hiji unsur, atawa kosong, i.e. teu ngandung unsur. Éta dinyatakeun nganggo operator @(), anu urang peryogikeun dina tulisan salajengna - penting pisan pikeun nambihan arrays anu sanés kana array (nyieun arrays multidimensional), ngalirkeun arrays kana fungsi salaku argumen, sarta tugas sarupa:

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

Nalika hiji Asép Sunandar Sunarya diinisialisasi, nilaina didaptarkeun dipisahkeun ku koma (operator husus ,):

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

Dina kalolobaan kasus, operator @() tiasa dileungitkeun:

$test_array = 1, 2, 3, 4

Dina hal ieu, hiji Asép Sunandar Sunarya hiji unsur ieu initialized kieu

$test_array = , 1

Elemen Array diaksés nganggo indéks integer dumasar-nol sareng operator indéks (kurung kuadrat):

$test_array[0] = 1

Anjeun tiasa nangtukeun sababaraha indéks dipisahkeun ku koma, incl. ngulang deui:

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

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Operator .. (dua titik - operator rentang) mulih Asép Sunandar Sunarya integer dina wates luhur jeung handap dieusian. Contona, éksprési 1..4 kaluaran hiji Asép Sunandar Sunarya opat elemen @(1, 2, 3, 4), jeung éksprési 8..5 outputs hiji Asép Sunandar Sunarya @ (8, 7, 6, 5).

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Ngagunakeun operator rentang, Anjeun bisa initialize hiji Asép Sunandar Sunarya ($ test_array = 1..4) atawa meunang nyiksikan (nyiksikan), i.e. runtuyan unsur ti hiji Asép Sunandar Sunarya jeung indéks ti nu sejen. Dina hal ieu, angka négatip -1 ngalambangkeun unsur panungtungan Asép Sunandar Sunarya, -2 - penultimate, jeung saterusna.

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

Catet yén nilai integer array tiasa langkung ageung tibatan nilai indéks maksimum tina array data. Dina hal ieu, sadaya nilai dipulangkeun ka anu terakhir:

$test_array[0..100]

Upami anjeun nyobian ngaksés hiji unsur Asép Sunandar Sunarya anu teu aya, $ null dipulangkeun.

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Dina PowerShell, arrays tiasa ngandung unsur tipena béda atanapi diketik kuat:

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

Dimana harta $ test_array.count nyaeta jumlah elemen Asép Sunandar Sunarya.

Conto nyieun array anu diketik kuat:

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

méja Hash

Jinis dasar variabel séjén dina basa PowerShell nyaéta tabel hash, ogé katelah arrays asosiatif. Hashtables sami sareng objék JSON sareng diwangun dina dasar nilai konci. Teu kawas arrays biasa, elemen maranéhanana diakses ku konci ngaranna, nu sipat objék (anjeun ogé bisa ngagunakeun operator indéks - kurung kuadrat).

Méja hash kosong dinyatakeun nganggo simbol @ sareng kurung operator:

$test_hashtable = @{}

Nalika nyatakeun, anjeun tiasa langsung nyiptakeun konci sareng napelkeun nilai ka aranjeunna:

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

Nambahkeun hiji unsur kana tabel hash, anjeun kudu nangtukeun hiji konci nu teu acan aya kana eta, atawa make metoda Tambah (). Lamun hiji ngerjakeun dijieun pikeun konci aya, nilai na bakal robah. Metodeu Hapus () digunakeun pikeun ngahapus unsur tina méja hash.

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

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Variabel tipe ieu bisa diliwatan salaku alesan pikeun fungsi jeung cmdlets - dina artikel salajengna urang bakal diajar kumaha ieu dipigawé, sarta ogé mertimbangkeun tipe séjén sarupa - PSCustomObject.

fungsi

PowerShell gaduh sadayana anu anjeun peryogikeun pikeun program prosedural, kalebet fungsi. Pikeun ngajelaskeun aranjeunna, kecap fungsi Function dianggo, saatos éta anjeun kedah netepkeun nami fungsi sareng awakna dina kurung operator. Upami anjeun kedah ngalebetkeun argumen kana fungsina, anjeun tiasa netepkeunana langsung saatos nami dina kurung.

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

fungsi nu salawasna mulih hasil - eta mangrupakeun Asép Sunandar Sunarya ti hasil sagala pernyataan na, lamun aya leuwih ti hiji. Lamun aya ngan hiji pernyataan, hijina nilai tina tipe pakait dipulangkeun. Wangunan $ nilai balik nambahkeun unsur kalawan nilai $ nilai ka Asép Sunandar Sunarya hasil na aborts palaksanaan daptar pernyataan, sarta fungsi kosong mulih $ null.

Contona, hayu urang nyieun hiji fungsi pikeun kuadrat angka:

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

Catet yén dina awak hiji fungsi, anjeun tiasa nganggo variabel naon waé anu dinyatakeun sateuacan nelepon, sareng fungsi nelepon dina PowerShell sigana teu biasa: argumen (upami aya) henteu diapit ku kurung sareng dipisahkeun ku spasi.

sqr 2

atanapi kitu:

sqr -number 2

Kusabab cara argumen disalurkeun, fungsina sorangan sakapeung kedah dikurung dina kurung:

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

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Nalika ngajelaskeun fungsi, anjeun tiasa napelkeun nilai standar pikeun argumen:

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

Aya sintaksis séjén pikeun ngajéntrékeun argumen fungsi, salian ti éta, parameter bisa dibaca tina pipa - kabeh ieu bakal mangpaat dina artikel salajengna, nalika urang nempo modul diékspor sarta nyieun cmdlets sorangan.

Kasalahan ngolah

PowerShell ngabogaan Try...Catch...Ahirna mékanisme pikeun nanganan pengecualian. Blok Try ngandung kodeu dimana aya kasalahan, sareng blok Catch ngandung pananganana. Upami teu aya kasalahan, éta henteu dieksekusi. Blok Tungtungna dieksekusi sanggeus blok Coba, paduli lumangsungna kasalahan, tur aya sababaraha blok Catch pikeun tipena béda iwal. Pangecualian sorangan ditulis kana variabel standar anu teu didéklarasikeun ($_) sareng tiasa dipulut kalayan gampang. Dina conto di handap, urang nerapkeun panyalindungan ngalawan ngasupkeun nilai teu valid:

try {

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

} catch {

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

}

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

Ieu nyimpulkeun ulasan ngeunaan dasar-dasar program dina basa PowerShell. Dina artikel di handap ieu, urang bakal diajar di leuwih jéntré gawé bareng variabel tina tipena béda, kumpulan, éksprési biasa, nyieun fungsi, modul jeung cmdlet custom, kitu ogé programming berorientasi obyék.

naon Windows PowerShell sareng Naon Anu Kedah Didahar Sareng Éta? Bagian 2: Bubuka kana Basa Pamrograman

sumber: www.habr.com

Mésér hosting anu dipercaya pikeun situs anu gaduh panyalindungan DDoS, server VPS VDS 🔥 Meser hosting situs wéb anu tiasa dipercaya nganggo panyalindungan DDoS, server VPS VDS | ProHoster