Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Historicky sú príkazové nástroje v systémoch Unix lepšie vyvinuté ako vo Windows, avšak s príchodom nového riešenia sa situácia zmenila.

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Pre PowerShell môžete písať skripty v interpretovateľnom mult paradigmatickom jazyku, ktorý obsahuje prvky klasického procedurálneho, objektovo orientovaného a dokonca aj funkcionálneho programovania: podmienečné skoky, cykly, premenné, polia, hašovacie tabuľky, triedy, spracovanie chýb, ako aj funkcie, cmdlety a potrubia. Predchádzajúci článok bola venovaná základom práce v prostredí, a teraz ponúkame čitateľom malý sprievodca pre programátorov.

Obsah:

Komentáre
Premenné a ich typy
Systémové premenné
Rozsahy platnosti
Premenné prostredia
Aritmetické operátory a porovnávacie operátory
Priradzovacie operátory
Logické operátory
Podmienečný skok
Cyklov
Polia
Hašovacie tabuľky
Funkcie
Správa chýb

Kód môžete písať v akomkoľvek textovom editore alebo pomocou integrovaného vývojového prostredia — najjednoduchšie je zobrať Windows PowerShell ISE z dodávky serverových operačných systémov Microsoft. Je to potrebné iba pre dosť zložité skripty: krátke príkazy je jednoduchšie vykonávať v interaktívnom režime.

Komentáre

Použitie komentárov sa považuje za súčasť dobrého štýlu programovania spolu s správnymi odsadením a medzerami:

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

<# 

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

#>

Premenné a ich typy

Premenné v PowerShell sú pomenované objekty. Ich názvy môžu obsahovať podčiarkovník, ako aj písmená a čísla. Pred názvom sa vždy používa symbol $, a aby ste deklarovali premennú, stačí uviesť interpretera platné meno:

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Na inicializáciu premennej (priradenie jej hodnoty) sa používa priradzovací operátor (symbol =):

$test = 100

Premennú je možné deklarovať s uvedením jej typu v zložených zátvorkách (operátor konverzie typov) pred menom alebo hodnotou:

[int]$test = 100

$test = [int]100

Je dôležité chápať, že premenné v PowerShell sú plnohodnotné objekty (triedy) so svojstvami a metódami, ktorých typy sú založené na existujúcich v .NET Core. Vymenovať hlavné:

Typ (trieda .NET)

Popis

Príklad kódu

[string]
System.String

Unicode reťazec 

$test = „test“
$test = ‘test’

[char]
System.Char

Unicode znak (16 bitov)

[char]$test = ‘c’

[bool]
System.Boolean

Logický typ (logická hodnota True alebo False)

[bool]$test = $true

[int]
System.Int32

Dvadsaťtrirozmerné celé číslo (32 bitov)

[int]$test = 123456789

[long]
System.Int64

Šesťdesiatštyrirozmerné celé číslo (64 bitov)

[long]$test = 12345678910

[single]
System.Single

Hodnota s plávajúcou čiarkou dĺžka 32 bitov

[single]$test = 12345.6789

[double]
System.Double

číslo s plávajúcou desatinou dĺžkou 64 bitov (8 bajtov)

[double]$test = 123456789.101112

[decimal]
System.Decimal

číslo s plávajúcou desatinou dĺžkou 128 bitov (koniec musí byť označený ako d)

[decimal]$test = 12345.6789d

[DateTime]
System.DateTime

dátum a čas 

$test = Get-Date

[array]
System.Object[]

pole, ktorého index prvkov začína od 0

$test_array = 1, 2, «test», 3, 4

[hashtable]
System.Collections.Hashtable

hashovacie tabuľky — asociatívne polia s pomenovanými kľúčmi, vytvorené podľa princípu: @{kľúč = «hodnota»}

$test_hashtable = @{one=«jeden»; two=«dva»; three=«tri»}

PowerShell podporuje implicitnú konverziu typov, navyše typ premennej sa môže meniť za behu (napríklad pomocou priradzovacieho operátora), ak nie je explicitne určený — v takom prípade interpretr vydá chybu. Typ premennej z predchádzajúceho príkladu je možné zistiť pomocou volania metódy GetType():

$test.GetType().FullName

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Existuje určité množstvo cmdletov na správu premenných. Ich zoznam sa pohodlne zobrazuje pomocou príkazu:

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

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Na zobrazenie deklarovaných premenných a ich hodnôt je možné použiť špeciálny cmdlet:

Get-Variable | more

Tento spôsob sa môže zdať nadmerne zložitý, s premennými je oveľa pohodlnejšie pracovať cez operátory alebo priamo prostredníctvom ich vlastností a metód. Napriek tomu cmdlety majú svoje miesto, pretože umožňujú zadať niektoré ďalšie parametre. Je dôležité pochopiť, že používateľské premenné sú definované len v rámci aktuálnej relácie. Po zatvorení konzoly alebo ukončení skriptu sa odstránia.

Systémové premenné

Okrem užívateľom deklarovaných existujú aj vstavané (systémové) premenné, ktoré sa neodstraňujú po ukončení aktuálnej relácie. Delia sa na dva typy, pričom údaje o stave PowerShell sú uložené v automatických premenných, ktorým nemožno priradiť ľubovoľné hodnoty. Medzi ne patrí napríklad $PWD:

$PWD.Path

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Na uchovávanie užívateľských nastavení sú potrebné preferenčné premenné, ktorých hodnoty je možné zmeniť. Napríklad pomocou $ErrorActionPreference sa určuje reakcia interpretera na vznik nekritických chýb.

Okrem operátorov a cmdletov pre prístup k deklarovaným premenným existuje aj pseudokumulátor Variable:. Môžete s ním pracovať analogicky k iným kumulátorom, pričom premenné v tomto prípade pripomínajú objekty súborového systému:

Get-ChildItem Variable: | more

alebo

ls Variable: | more

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Rozsahy platnosti

Pre premenné v PowerShell existuje pojem rozsah (Scope). Pôsobnosť globálneho rozsahu (Global) sa rozširuje na celé aktuálne sedenie — zahŕňa napríklad systémové premenné. Lokálne (Local) premenné sú dostupné iba v oblasti, kde boli definované: povedzme v rámci funkcie. Existuje aj pojem rozsahu skriptu (Script), ale pre príkazy skriptu je ustanovený ako lokálny. Predvolená hodnota pri deklarovaní premenných je lokálny rozsah a na jeho zmenu je potrebná špeciálna konštrukcia vo formáte: $Global: premenná = hodnota.

Napríklad takto:

$Global:test = 100

Premenné prostredia

Z PowerShell je dostupný aj ďalší pseudokumulátor Env:, pomocou ktorého môžete pristupovať k premenným prostredia. Pri spustení shellu sa kopírujú z rodičovského procesu (t.j. z procesu, ktorý inicioval aktuálne sedenie) a obvykle ich pôvodné hodnoty zodpovedajú hodnotám v ovládacom paneli. Na zobrazenie premenných prostredia sa používa cmdlet Get-ChildItem alebo jeho pseudonymy (aliasy): ls a dir.

dir Env:

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Tieto premenné predstavujú sekvencie bajtov (alebo znakov, ak chcete), ktorých interpretácia závisí iba od programu, ktorý ich používa. Cmdlety *-Variable s premennými prostredia nefungujú. Aby ste k nim pristupovali, musíte použiť prefix disku:

$env:TEST = "Hello, World!"

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Aritmetické operátory a porovnávacie operátory

V PowerShell existujú nasledujúce aritmetické operátory: + (súčet), — (odčítanie), * (násobenie), / (delenie) a % (modul alebo zvyšok po delení). Výsledok aritmetického výrazu sa vyhodnocuje zľava doprava v súlade s bežne uznávaným poradím operácií a na zoskupenie častí výrazu sa využívajú okrúhle zátvorky. Medzery medzi operátormi sa ignorujú, používajú sa len na uľahčenie vnímania. Operátor + tiež spája a operátor * opakuje reťazce. Pri pokuse pridať číslo k reťazcu sa premení na reťazec. Navyše v jazyku PowerShell existuje množstvo porovnávacích operátorov, ktoré kontrolujú zhody medzi dvoma hodnotami a vracajú logické hodnoty True alebo False:

Operátor

Popis

Príklad kódu

-eq

Rovný / Rovno (ekvivalent = alebo == v iných jazykoch)

$test = 100
$test -eq 123 

-ne

Nerovný / Nie je rovný (ekvivalent alebo !=)

$test = 100
$test -ne 123   

-gt

Viac ako / Väčší (ekvivalent >)

$test = 100
$test -gt 123

-ge

Viac alebo rovný / Väčší alebo rovný (ekvivalent >=)

$test = 100
$test -ge 123

-lt

Menej ako / Menší (ekvivalent <)

$test = 100
$test -lt 123  

-le

Menej alebo rovný / Menší alebo rovný (ekvivalent <=)

$test = 100
$test -le 123

Existujú aj ďalšie podobné operátory, ktoré umožňujú napríklad porovnávať reťazce s ohľadom na zástupné symboly alebo používať regulárne výrazy na vyhľadávanie zhod. Tieto budeme podrobne skúmať v nasledujúcich článkoch. Symboly a = sa na porovnávanie nepoužívajú, pretože sú vyhradené na iné účely.

Priradzovacie operátory

Okrem najbežnejšieho operátora = existujú aj ďalšie priraďovacie operátory: +=, -=, *=, /= a %= . Tieto menia hodnotu pred priradením. Rovnako fungujú aj unárne operátory ++ a —, ktoré zvyšujú alebo znižujú hodnotu premennej — tiež sa považujú za priraďovacie operátory.

Logické operátory

Na popísanie zložitých podmienok je samotné porovnanie nedostatočné. Akékoľvek logické výrazy sa dajú zapísať pomocou operátorov: -and, -or, -xor, -not a!.. Fungujú rovnako ako v iných programovacích jazykov, pričom môžeme použiť okrúhle zátvorky na určenie poradia vyhodnocovania:

("Test" -eq "Test") -and (100 -eq 100)

-not (123 -gt 321) 

!(123 -gt 321)

Podmienečný skok

V PowerShell sú väzobné operátory štandardné: IF(IF…ELSE, IF…ELSEIF…ELSE) a SWITCH. Prejdime si ich použitie na príkladoch:

[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  5 alebo hodnota nie je definovaná"}
}

Cyklov

V jazyku PowerShell existuje niekoľko druhov cyklov: WHILE, DO WHILE, DO UNTIL, FOR a FOREACH.

Cyklus s podmienkou funguje, ak/pri splnení podmienky:

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

Cyklus s podmienkou na konci sa vykoná aspoň raz, pretože kontrola podmienky sa vykonáva po ukončení iterácie. DO WHILE funguje, pokiaľ je podmienka pravdivá, a DO UNTIL — pokiaľ je nepravdivá:

[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)

Počet iterácií cyklu FOR je známy vopred:

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

V cykle FOREACH sa prechádza cez prvky poľa alebo kolekcie (hash tabuliek):

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

Polia

V premennej PowerShell sú uložené nielen jednotlivé objekty (číslo, reťazec atď.), ale aj viaceré. Najjednoduchším druhom takýchto premenných sú polia. Pole môže pozostávať z niekoľkých prvkov, z jedného prvku alebo byť prázdne, t.j. neobsahovať žiadne prvky. Na jeho vyhlásenie sa používa operátor @(), ktorý budeme potrebovať v nasledujúcom článku — je veľmi dôležitý na pridávanie do poľa iných polí (vytváranie viacrozmerných polí), prenášanie polí do funkcií ako argument a podobné úlohy:

$test_array = @() #vytvárame prázdne pole

Pri inicializácii poľa sa jeho hodnoty uvádzajú oddelené čiarkou (špeciálny operátor ,):

$test_array = @(1, 2, 3, 4) # vytvárame pole zo štyroch prvkov 

Vo väčšine prípadov možno operátor @() vynechať:

$test_array = 1, 2, 3, 4

V tomto prípade je pole s jedným prvkom inicializované nasledujúcim spôsobom

$test_array = , 1

Na prístup k prvkom poľa sa používa celočíselný index začínajúci od nuly a indexovací operátor (hranaté zátvorky):

$test_array[0] = 1

Môžete uviesť viacero indexov oddelených čiarkou, vrátane duplicitných:

$test_array = "jeden", "dva", "tri", "štyri"
$test_array[0,1,2,3]
$test_array[1,1,3,3,0]

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Operátor .. (dve bodky — operátor rozsahu) vracia pole celých čísel na určitom hornej a dolnej hranici úseku. Napríklad, výraz 1..4 vypisuje pole štyroch prvkov @(1, 2, 3, 4), a výraz 8..5 — pole @(8, 7, 6, 5).

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

S pomocou operátora rozsahu môžete inicializovať pole ($test_array = 1..4) alebo získať výrez (slice), t.j. sekvenciu prvkov jedného poľa s indexmi z iného. Pri tom negatívne číslo -1 označuje posledný prvok poľa, -2 — predposledný a pod.

$test_array = "jeden", "dva", "tri", "štyri"
$test_array[0..2]
$test_array[2..0]
$test_array[-1..0]
$test_array[-2..1]

Všimnite si, že hodnoty celočíselného poľa môžu byť väčšie ako maximálna hodnota indexu poľa s údajmi. V tomto prípade sa vrátia všetky hodnoty až do posledného:

$test_array[0..100]

Ak sa pokúsite získať jediný neexistujúci prvok poľa, vráti sa hodnota $null.

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

V PowerShell môžu polia obsahovať prvky rôznych typov alebo byť striktne typizované:

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

Kde vlastnosť $test_array.count — počet prvkov poľa.

Príklad vytvorenia striktne typizovaného poľa:

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

Hašovacie tabuľky

Ďalší základný typ premenných v jazyku PowerShell — hash tabuľky, ktoré sa tiež nazývajú asociatívne polia. Hashtable sú podobné JSON objektom a stavajú sa na princípe kľúč-hodnota. Na rozdiel od obyčajných polí, prístup k ich prvkom sa uskutočňuje podľa pomenovaných kľúčov, ktoré sú vlastnosťami objektu (tiež sa dajú použiť indexátor — hranaté zátvorky).

Prázdna hash tabuľka sa vyhlasuje pomocou služobného symbolu @ a operátorových zátvoriek:

$test_hashtable = @{}

Pri vyhlasovaní môžete hneď vytvoriť kľúče a priradiť im hodnoty:

$test_hashtable = @{one="jeden"; two="dva"; three="tri"; "some key"="some value"}

Na pridanie prvku do hash tabuľky je potrebné priradiť jej ešte neexistujúci kľúč alebo využiť metódu Add(). Ak priraďujete s existujúcim kľúčom, jeho hodnota sa zmení. Na odstránenie prvku z hash tabuľky sa používa metóda Remove().

$test_hashtable."some key"
$test_hashtable["some key"]
$test_hashtable.Add("four", "štyri")
$test_hashtable.five = "päť"
$test_hashtable['five'] = "nahradzujem hodnotu"
$test_hashtable.Remove("one")

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Premenné tohto typu je možné odovzdávať ako argumenty funkciám a cmdletom — v nasledujúcom článku preskúmame, ako sa to robí, a taktiež preskúmame ďalší podobný typ — PSCustomObject.

Funkcie

V jazyku PowerShell sú všetky potrebné prvky pre procedurálne programovanie, vrátane funkcií. Na ich opis sa používa kľúčové slovo Function, za ktorým musí nasledovať názov funkcie a jej telo uvedené v zátvorkách. Ak je potrebné odovzdať do funkcie argumenty, môžu sa uviesť hneď za názvom v okrúhlych zátvorkách.

function názov-funkcie (argument1, ..., argumentN) 
{ 
        telo-funkcie 
} 

Funkcia vždy vracia výsledok — je to pole výsledkov všetkých jej statementov, ak ich je viac ako jeden. Ak je statement jeden, vracia sa jediné hodnotenie príslušného typu. Konštrukcia return $value pridáva prvok so hodnotou $value do poľa výsledkov a preruší vykonávanie statement listu, pričom prázdna funkcia vracia $null.

Na príklad si vytvoríme funkciu na umocnenie čísla na druhú:

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

Všimnite si, že v tele funkcie je možné používať akékoľvek premenné, ktoré boli vyhlásené pred jej volaním, a volanie funkcií v PowerShell môže pôsobiť nezvyčajne: argumenty (ak nejaké sú) nie sú uzatvorené v okrúhlych zátvorkách a sú oddelené medzerami.

sqr 2

alebo takto:

sqr -number 2

Vzhľadom na spôsob odovzdávania argumentov je niekedy potrebné nasadiť funkciu do zátvoriek:

function test_func ($n) {}
test_func -eq $null     # funkcia bola nevolaná
(test_func) -eq $null   # výsledok výrazu — $true

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Pri opise funkcie je možné argumentom priradiť predvolené hodnoty:

function func ($arg = value) {
         #telo funkcie
}

Existuje aj iná syntax na opis argumentov funkcie, navyše môžu byť parametre čítané z potrubia – to všetko sa nám zíde v nasledujúcom článku, keď budeme skúmať exportované moduly a vytváranie vlastných cmdletov.

Správa chýb

V PowerShell existuje mechanizmus Try…Catch…Finally, ktorý umožňuje spracovávať výnimočné situácie. Do bloku Try sa vloží kód, v ktorom môže vzniknúť chyba, a do bloku Catch – jeho spracovateľ. Ak chyba nenastane, blok Catch sa nevykoná. Blok Finally sa vykonáva po bloku Try bez ohľadu na vznik chyby, pričom môže existovať niekoľko blokov Catch pre rôzne typy výnimiek. Samotná výnimka sa zapisuje do premenné, ktorá nevyžaduje deklaráciu ($_) a dá sa ľahko extrahovať. V nasledujúcom príklade realizujeme ochranu proti zadaniu nesprávnej hodnoty:

try {

        [int]$test = Read-Host "Zadajte číslo"
        100 / $test

} catch {

         Write-Warning "Nesprávne číslo"
         Write-Host $_

}

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Týmto by sme ukončili prehľad základov programovania v jazyku PowerShell. V nasledujúcich článkoch sa podrobnejšie pozrieme na prácu s premennými rôznych typov, kolekcie, regulárne výrazy, vytváranie funkcií, modulov a vlastných príkazových letov, ako aj na objektovo-orientované programovanie.

Čo je Windows PowerShell a na čo sa používa? Časť 2: Úvod do programovacieho jazyka

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster