Ngokomlando, izinsiza zomugqa womyalo ezinhlelweni ze-Unix zithuthukiswe kangcono kuneWindows, kodwa ngokufika kwesixazululo esisha, isimo sishintshile.
I-PowerShell ingabhalwa ngolimi oluhunyushiwe, olunamapharamitha amaningi anezici zenqubo yakudala, okuqondiswe entweni, ngisho nokusebenza okusebenzayo: i-branching enemibandela, izihibe, okuguquguqukayo, ama-array, amatafula e-hashi, amakilasi, ukuphatha amaphutha, kanye nemisebenzi, cmdlets, namapayipi .
Incazelo:
Ungabhala ikhodi kunoma yimuphi umhleli wombhalo noma usebenzise indawo edidiyelwe yokuthuthukisa - indlela elula ukuthatha i-Windows PowerShell ISE eza nezinhlelo zokusebenza zeseva ye-Microsoft. Lokhu kudingekile kuphela kumaskripthi ayinkimbinkimbi: amasethi amafushane wemiyalo kulula ukuyisebenzisa ngokuhlanganyela.
Amazwana
Ukusebenzisa amazwana kuthathwa njengengxenye yesitayela esihle sokuhlela kanye nokuhlehlisa kahle nendawo emhlophe:
# Для строчных комментариев используется символ решетки — содержимое строки интерпретатор не обрабатывает.
<#
Так обозначаются начало и конец блочного комментария.
Заключенный между ними текст интерпретатор игнорирует.
#>
Okuguquguqukayo nezinhlobo zazo
Okuguquguqukayo ku-PowerShell kuqanjwe izinto. Amagama abo angafaka uhlamvu lwe-underscore, kanye nezinhlamvu nezinombolo. Uphawu lwe-$ luhlala lusetshenziswa ngaphambi kwegama, futhi ukumemezela okuguquguqukayo, kwanele ukunikeza umhumushi igama elivumelekile:
Ukuze uqalise okuguquguqukayo (unikeze inani kukho), u-opharetha wesabelo (uphawu =) uyasetshenziswa:
$test = 100
Ungakwazi ukumemezela okuguquguqukayo ngokucacisa uhlobo lwako kubakaki abayisikwele (uhlobo lwe-opharetha yokusakaza) ngaphambi kwegama noma inani:
[int]$test = 100
$test = [int]100
Kubalulekile ukuqonda ukuthi okuguquguqukayo ku-PowerShell kuyizinto ezigcwele (amakilasi) anezakhiwo nezindlela izinhlobo zazo ezisekelwe kulezo eziku-.NET Core. Sibala eziyinhloko:
Uhlobo (.NET class)
Incazelo
Isibonelo sekhodi
[uchungechunge] Uhlelo.UchungechungeIyunithi yezinhlamvu ye-Unicode
$test = "test"
$test = 'test'
Uhlamvu lwe-Unicode (16 bits)
[char]$test = 'c' [bool] Isistimu.I-Booleanuhlobo lwe-boolean (i-boolean Iqiniso noma Amanga)
[bool]$test = $true [int] System.Int32inombolo ephelele yamabhithi angamashumi amathathu nambili (32 bits)
[int]$test = 123456789 [inde] System.Int64amabhithi angamashumi ayisithupha nane (64 bits)
[isikhathi eside]$test = 12345678910 [engashadile] Uhlelo.Alulodwainombolo yephoyinti elintantayo elingamabhithi angama-32 ubude
[okukodwa]$test = 12345.6789 [kabili]Isistimu.Kabiliinombolo yephoyinti elintantayo lobude bamabhithi angama-64 (amabhayithi ayi-8)
[okukabili]$test = 123456789.101112 [idesimali]Isistimu.IdesimaliInombolo yephoyinti elintantayo elingu-128-bit (iyadingeka ukuze igcine ngo-d)
[idesimali]$test = 12345.6789d [DateTime]System.DateTimeusuku nesikhathi
$test = GetDate
[uhlu] Isistimu.Into[]amalungu afanayo inkomba yawo yesici iqala ku-0
$test_array = 1, 2, "test", 3, 4
[hashtable] System.Collections.Hashtableamathebula e-hashi ayizinhlu zokuhlanganisa ezinokhiye abaqanjwe igama, akhiwe ngokuya ngomgomo othi: @{key = "value"}
$test_hashtable = @{one="one"; ezimbili="ezimbili"; ezintathu="ntathu"}
I-PowerShell isekela ukuguqulwa kohlobo olungaguquki, ngaphezu kwalokho, uhlobo lokuguquguquka lungashintshwa ngokundiza (isibonelo, kusetshenziswa u-opharetha wesabelo), uma kungacaciswanga ngenkani - kulokhu, umhumushi uzonikeza iphutha. Ungakwazi ukunquma uhlobo lokuguquguquka esibonelweni sangaphambilini ngokubiza indlela ye-GetType():
$test.GetType().FullName
Kunenani lama-cmdlets okushintsha okuguquguqukayo. Uhlu lwabo ngendlela efanelekile luboniswa kusetshenziswa umyalo:
Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap
Ukubuka okuguquguqukayo okumenyezelwe kanye namanani abo, ungasebenzisa i-cmdlet ekhethekile:
Get-Variable | more
Le ndlela ibonakala inzima kakhulu, kulula kakhulu ukusebenza neziguquguqukayo ngokusebenzisa opharetha noma ngokufinyelela izakhiwo nezindlela zabo ngokuqondile. Nokho, ama-cmdlets anelungelo lokuba khona ngoba akuvumela ukuthi usethe amanye amapharamitha angeziwe. Kubalulekile ukuqonda ukuthi okuguquguqukayo komsebenzisi kuchazwa kuphela phakathi nesikhathi samanje. Uma ikhonsoli ivaliwe noma umbhalo uphela, ziyasuswa.
Okuguquguqukayo kwesistimu
Ngokungeziwe kulokho okumenyezelwe umsebenzisi, kukhona okuhlukile okwakhelwe ngaphakathi (isistimu) okungasuswa ngemva kokuphela kweseshini yamanje. Zihlukaniswe zaba izinhlobo ezimbili, kuyilapho idatha yesimo se-PowerShell igcinwa eziguquguqukayo ezizenzakalelayo ezingakwazi ukunikezwa amanani angenangqondo ngokwazo. Lokhu kufaka phakathi, isibonelo, i-$PWD:
$PWD.Path
Kudingeka okuhlukile okuthandwayo ukuze kugcinwe izintandokazi zabasebenzisi, amanani angashintshwa. Isibonelo, kusetshenziswa i-$ErrorActionPreference , ukusabela komyalo wotolika lapho kuvela amaphutha angabulali kuyasethwa.
Ngokungeziwe kuma-opharetha nama-cmdlets okufinyelela okuguquguqukayo okumenyezelwe, kukhona Okuguquguqukayo: i-pseudo-accumulator. Ungasebenza nayo ngokufanisa namanye amadrayivu, futhi okuguquguqukayo kuleli cala kufana nezinto zesistimu yefayela:
Get-ChildItem Variable: | more
noma
ls Variable: | more
Izikophu
Kokuguquguqukayo ku-PowerShell, kunomqondo wobubanzi (Scope). Isenzo se-global scope (Global) sisebenza kuso sonke isikhathi samanje - sihlanganisa, isibonelo, okuguquguqukayo kwesistimu. Okuguquguqukayo kwasendaweni (Kwasendaweni) kutholakala kuphela kusikophu lapho kuchazwe khona: isho ngaphakathi komsebenzi. Kukhona nomqondo wobubanzi besikripthi (Iskripthi), kodwa emiyalweni yeskripthi, empeleni siyindawo. Ngokuzenzakalelayo, lapho kumenyezelwa okuguquguqukayo, banikezwa ububanzi bendawo, futhi ukuze uguqule lokhu, udinga ukwakhiwa okukhethekile okufana nalokhu: $Global: variable = value.
Ngokwesibonelo, kanje:
$Global:test = 100
Okuguquguqukayo kwemvelo (imvelo)
Enye i-pseudo-drive, i-Env:, iyatholakala ku-PowerShell futhi ingasetshenziswa ukufinyelela okuguquguqukayo kwemvelo. Lapho igobolondo liqala, likopishwa kusukela kunqubo yomzali (okungukuthi, kusukela kuhlelo oluqalise iseshini yamanje) futhi ngokuvamile amanani awo okuqala afana namanani ephaneli yokulawula. Ukuze ubuke okuguquguqukayo kwendawo, sebenzisa i-Get-ChildItem cmdlet noma iziteketiso zayo (iziteketiso): ls kanye ne-dir.
dir Env:
Lezi ziguquguqukayo ziwukulandelana kwamabhayithi (noma izinhlamvu, uma uthanda), ukuchazwa kwazo okuncike kuphela ohlelweni oluzisebenzisayo. Ama-cmdlets * -Aguquguqukayo awasebenzi nokuguquguquka kwemvelo. Ukuze ufinyelele kuzo, kufanele usebenzise isiqalo sedrayivu:
$env:TEST = "Hello, World!"
Abaqhubi be-Arithmetic kanye nokuqhathanisa
I-PowerShell inikeza ama-opharetha ezibalo alandelayo: + (ukwengeza), - (ukususa), * (phindaphinda), / (ukuhlukanisa), kanye no-% (imodulo noma imodulo). Umphumela wesenzo se-arithmetic uhlaziywa ukusuka kwesokunxele kuye kwesokudla ngokuvumelana nohlelo lokusebenza olwamukelwa ngokuvamile, futhi abakaki basetshenziselwa ukuhlanganisa izingxenye zenkulumo. Izikhala phakathi kwama-opharetha azinakwa, zisetshenziselwa ukwenza kube lula ukufunda. U-opharetha + naye uyahlanganisa, futhi * opharetha uphinda izintambo. Uma uzama ukwengeza inombolo kuyunithi yezinhlamvu, izoguqulelwa kuyunithi yezinhlamvu. Ngaphezu kwalokho, ulimi lwe-PowerShell lunabasebenzisi abaningi bokuqhathanisa abahlola ukufana phakathi kwamanani amabili bese bebuyisela i-boolean ethi Iqiniso noma Amanga:
Umsebenzi
Incazelo
Isibonelo sekhodi
-eq
Kuyalingana / Kuyalingana (okufana no-= noma == ngezinye izilimi)
$Test = 100
$Test -eq 123
- kunjalo
Ayilingani / Ayilingani (kufana ne-<> noma !=)
$Test = 100
Ukuhlolwa kwe-$ -ne 123
-gt
Okukhulu kuno / Okuningi (i-analogue>)
$Test = 100
Ukuhlola kwe-$ -gt 123
-ge
Mkhulu kuno noma olinganayo / mkhulu kuno noma olinganayo (okufanayo >=)
$Test = 100
Ukuhlolwa kwe-$ -ge 123
-lt
Ngaphansi kokuthi / Ngaphansi (kufana ne-<)
$Test = 100
Ukuhlola kwe-$ -lt 123
-the
Ngaphansi noma kulingana / Ngaphansi noma kulingana (kufana ne-<=)
$Test = 100
$Test -le 123
Kukhona abanye o-opharetha abafanayo abakuvumela ukuthi, isibonelo, uqhathanise izintambo ezisuselwe ku-wildcard noma usebenzise izinkulumo ezivamile ukuze ufanise iphethini. Sizowahlanganisa ngokuningiliziwe ezihlokweni ezizayo. Izimpawu <, > kanye = azisetshenziselwa ukuqhathanisa ngoba zisetshenziselwa ezinye izinjongo.
Abaqhubi bezabelo
Ngokungeziwe ku-opharetha = ovame kakhulu, kukhona abanye opharetha bezabelo: +=, -=, *=, /= kanye no-%=. Bashintsha inani ngaphambi komsebenzi ozokwenziwa. Ama-opharetha angajwayelekile ++ kanye -, anyusa noma anciphisa inani lokuguquguquka, aziphatha ngendlela efanayo - asebenza nakubaqhubi bezabelo.
Ama-opharetha anengqondo
Ukuqhathanisa kukodwa akwanele ukuchaza izimo eziyinkimbinkimbi. Ungabhala noma yiziphi izinkulumo ezinengqondo usebenzisa ama-opharetha: -futhi, -noma, -xor, -hhayi futhi! .. Asebenza njengezinye izilimi zokuhlela, kuyilapho ungasebenzisa abakaki ukuze ucacise ukuhleleka kokuhlola:
("Тест" -eq "Тест") -and (100 -eq 100)
-not (123 -gt 321)
!(123 -gt 321)
Eqa Okunemibandela
Ama-opharetha egatsha ku-PowerShell ajwayelekile: IF(UMA...ELSE, IF…ELSEIF…ELSE) kanye SHINTSHA. Ake sibheke ukusetshenziswa kwabo ngezibonelo:
[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 или значение не определено"}
}
Imijikelezo
I-PowerShell inezinhlobo eziningana zamalophu: NGESIKHATHI, YENZA NGESIKHATHI, YENZA KUZE KUBE, FOR, kanye ne-Foreach.
Iluphu enombandela wangaphambili isebenza uma/inqobo nje uma iyiqiniso:
[int]$test = 0
while ($test -lt 10) {
Write-Host $test
$test = $test + 1
}
Amaluphu ane-postcondition azosebenza okungenani kanye, ngoba isimo siyahlolwa ngemva kokuphindwaphindwa. Ngesikhathi esifanayo, YENZA NGESIKHATHI isebenza ngenkathi isimo siyiqiniso, futhi YENZA KUZE kusebenze kuyilapho kungamanga:
[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)
Inani lokuphindaphinda kwe-loop FOR laziwa kusengaphambili:
for ([int]$test = 0; $test -lt 10; $test++) {
Write-Host $test
}
Kuluphu ye-FOREACH, iphinda phezu kwezakhi zohlelo noma iqoqo (ithebula le-hashi):
$test_collection = "item1", "item2", "item3"
foreach ($item in $test_collection)
{
Write-Host $item
}
Izinhlu
Okuguquguqukayo kwe-PowerShell akugcini nje kuphela izinto ezizodwa (inombolo, intambo, njll.), kodwa futhi eziningi. Uhlobo olulula kakhulu lokuguquguquka okunjalo ama-array. Amalungu afanayo angaqukatha ama-elementi ambalwa, i-elementi eyodwa, noma angabi nalutho, isb. aziqukethe izakhi. Kumenyezelwa kusetshenziswa i-opharetha ethi @(), esizoyidinga esihlokweni esilandelayo - kubaluleke kakhulu ekungezeni amanye amalungu afanayo ohlwini (ukudala ama-multidimensional array), ukudlulisa amalungu afanayo emisebenzini njenge-agumenti, kanye nemisebenzi efanayo:
$test_array = @() #создаем пустой массив
Lapho amalungu afanayo eqalisiwe, amanani awo afakwa ohlwini ahlukaniswe ngokhefana (opharetha okhethekile ,):
$test_array = @(1, 2, 3, 4) # создаем массив из четырех элементов
Ezimweni eziningi, @() opharetha angashiywa:
$test_array = 1, 2, 3, 4
Kulokhu, uhlu lwe-elementi eyodwa luqalwa ngendlela elandelayo
$test_array = , 1
Izinto ze-array zifinyelelwa kusetshenziswa inkomba yenombolo esekelwe kuziro kanye ne-opharetha yenkomba (abakaki abayisikwele):
$test_array[0] = 1
Ungacacisa izinkomba ezimbalwa ezihlukaniswe ngokhefana, kuhlanganisa. okuphindayo:
$test_array = "один", "два", "три", "четыре"
$test_array[0,1,2,3]
$test_array[1,1,3,3,0]
Umsebenzi ..
(amachashazi amabili - u-opharetha wobubanzi) ibuyisela izinombolo eziningi phakathi kwemingcele eshiwo ephezulu nephansi. Isibonelo, isisho esithi 1..4 sikhipha uhlu lwezinto ezine @(1, 2, 3, 4), kanye nenkulumo ethi 8..5 ikhipha amalungu afanayo @(8, 7, 6, 5).
Usebenzisa u-opharetha wobubanzi, ungakwazi ukuqalisa amalungu afanayo ($test_array = 1..4) noma uthole ucezu (ucezu), i.e. ukulandelana kwama-elementi asuka kumalungu afanayo anezinkomba ezisuka kwelinye. Kulokhu, inombolo engeyinhle -1 isho ingxenye yokugcina yohlu, -2 - engaphambili, njalonjalo.
$test_array = "один", "два", "три", "четыре"
$test_array[0..2]
$test_array[2..0]
$test_array[-1..0]
$test_array[-2..1]
Qaphela ukuthi amanani angamalungu afanayo aphelele angaba makhulu kunenani lenkomba eliphakeme lohlu lwedatha. Kulokhu, wonke amanani abuyiselwa kwelokugcina:
$test_array[0..100]
Uma uzama ukufinyelela into eyodwa yamalungu afanayo engekho, i-$null iyabuyiswa.
Ku-PowerShell, ama-arrays angaqukatha izici zezinhlobo ezahlukene noma athayiphe ngokuqinile:
$test_array = 1, 2, "тест", 3, 4
for ([int]$i = 0; $i -lt $test_array.count; $i++)
{
Write-Host $test_array[$i]
}
Lapho impahla ye-$test_array.count iyinani lama-elementi afanayo.
Isibonelo sokudala amalungu afanayo athayiphiwe ngokuqinile:
[int[]]$test_array = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Amatafula we-Hashi
Olunye uhlobo oluyisisekelo lokuguquguquka olimini lwe-PowerShell amathebula e-hashi, aziwa nangokuthi ama-associative arrays. Ama-hashtable afana nezinto ze-JSON futhi akhiwe ngesisekelo senani elingukhiye. Ngokungafani nezinhlaka ezijwayelekile, izakhi zazo zifinyelelwa ngokhiye abaqanjwe igama, okuyizakhiwo zento (ungasebenzisa futhi opharetha wenkomba - abakaki besikwele).
Ithebula le-hashi elingenalutho limenyezelwa kusetshenziswa uphawu luka-@ kanye nabakaki be-opharetha:
$test_hashtable = @{}
Lapho umemezela, ungakha ngokushesha okhiye futhi ubabele amanani:
$test_hashtable = @{one="один"; two="два"; three="три"; "some key"="some value"}
Ukwengeza i-elementi kuthebula le-hash, kufanele unikeze ukhiye ongakabi khona kulo, noma usebenzise indlela ethi Engeza (). Uma isabelo senziwa kukhiye okhona, inani lawo lizoshintsha. Indlela yokususa () isetshenziselwa ukususa i-elementi kuthebula le-hashi.
$test_hashtable."some key"
$test_hashtable["some key"]
$test_hashtable.Add("four", "четыре")
$test_hashtable.five = "пять"
$test_hashtable['five'] = "заменяем значение"
$test_hashtable.Remove("one")
Okuguquguqukayo kwalolu hlobo kungadluliswa njengezingxabano emisebenzini kanye nama-cmdlets - esihlokweni esilandelayo sizofunda ukuthi lokhu kwenziwa kanjani, futhi sicabangele olunye uhlobo olufanayo - PSCustomObject.
Imisebenzi
I-PowerShell inakho konke okudingayo ngohlelo lwenqubo, okuhlanganisa nemisebenzi. Ukuze uzichaze, igama lomsebenzi elithi Function liyasetshenziswa, ngemva kwalokho udinga ukucacisa igama lomsebenzi kanye nomzimba ofakwe kubakaki bomqhubi. Uma udinga ukudlulisa izimpikiswano kumsebenzi, ungazicacisa ngokushesha ngemva kwegama kubakaki.
function имя-функции (аргумент1, ..., аргументN)
{
тело-функции
}
Umsebenzi uhlale ubuyisela umphumela - uwuxhaxha lwemiphumela yazo zonke izitatimende zawo, uma kukhona ezingaphezu kwesisodwa. Uma kunesitatimende esisodwa kuphela, kubuyiselwa inani kuphela lohlobo oluhambisanayo. I-return $value construct ingeza into enevelu engu-$value ohlwini lomphumela futhi ichitha ukusetshenziswa kohlu lwesitatimende, futhi umsebenzi ongenalutho ubuyisela okuthi $null.
Isibonelo, masidale umsebenzi wokuphindaphinda inombolo:
function sqr ($number)
{
return $number * $number
}
Qaphela ukuthi emzimbeni wohlelo lokusebenza, ungasebenzisa noma yiziphi izinguquko ezimenyezelwe ngaphambi kokuyibiza, futhi imisebenzi yokubiza ku-PowerShell ingase ibonakale ingajwayelekile: izimpikiswano (uma zikhona) azivalwanga kubakaki futhi zihlukaniswa yizikhala.
sqr 2
noma kanje:
sqr -number 2
Ngenxa yendlela izimpikiswano ezidluliswa ngayo, umsebenzi ngokwawo ngezinye izikhathi udinga ukufakwa kubakaki:
function test_func ($n) {}
test_func -eq $null # функция не вызывалась
(test_func) -eq $null # результат выражения — $true
Lapho uchaza umsebenzi, ungabela amanani azenzakalelayo kuma-agumenti:
function func ($arg = value) {
#тело функции
}
Kukhona enye i-syntax echaza izimpikiswano zomsebenzi, ngaphezu kwalokho, imingcele ingafundwa kusukela kumzila wepayipi - konke lokhu kuzofika kahle esihlokweni esilandelayo, lapho sibheka amamojula athunyelwe futhi sidala ama-cmdlets ethu.
Iphutha ukucubungula
I-PowerShell ine-Try...Catch...Ekugcineni indlela yokusingatha okuhlukile. Ibhulokhi ye-Try iqukethe ikhodi lapho kungenzeka khona iphutha, futhi i-Catch block iqukethe isibambi sayo. Uma lingekho iphutha, alenziwa. Ibhulokhi Ekugcineni isetshenziswa ngemva kwebhulokhi ye-Try, kungakhathaliseki ukwenzeka kwephutha, futhi kungase kube namabhulokhi wokubamba amaningana ezinhlobo ezahlukene zokuhlukile. Okuhlukile ngokwako kubhalwe kokuguquguqukayo okungakamenyezelwa ($_) futhi kungabuyiswa kalula. Esibonelweni esingezansi, sisebenzisa ukuvikela ekufakeni inani elingavumelekile:
try {
[int]$test = Read-Host "Введите число"
100 / $test
} catch {
Write-Warning "Некорректное число"
Write-Host $_
}
Lokhu kuphetha ukubuyekezwa kwezisekelo zokuhlela ngolimi lwe-PowerShell. Ezihlokweni ezilandelayo, sizofunda kabanzi ngokusebenza ngokuhlukahluka kwezinhlobo ezahlukene, amaqoqo, izinkulumo ezivamile, ukudala imisebenzi, amamojula nama-cmdlets angokwezifiso, kanye nezinhlelo ezigxile entweni.
Source: www.habr.com