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.
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 .
Talaan sa mga sulod:
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:
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.StringUnicode string
$test = "test"
$test = 'test'
Unicode nga karakter (16 bits)
[char]$test = 'c' [bool] System.Booleanboolean type (boolean True or False)
[bool]$test = $tinuod [int] System.Int32katloan ug duha ka bit integer (32 bits)
[int]$test = 123456789 [taas] System.Int64kan-uman ug upat ka bit integer (64 bits)
[taas]$test = 12345678910 [single] System.Singlefloating point nga numero 32 bits ang gitas-on
[single]$test = 12345.6789 [doble]System.Doblefloating point nga gidaghanon sa gitas-on 64 bits (8 bytes)
[doble]$test = 123456789.101112 [decimal]System.Decimal128-bit floating point nga numero (gikinahanglan nga tapuson sa d)
[decimal]$test = 12345.6789d [PetsaOras]System.PetsaOraspetsa 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.HashtableAng 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
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
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
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
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:
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!"
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]
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).
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.
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")
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
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 $_
}
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.
Source: www.habr.com