Historice, mandatum lineae utilitatis in Unix systematis melius excultae sunt quam in Fenestra, sed, adveniente nova solutione, condicio mutata est.
PowerShell describi potest in lingua interpretata, multi- paradigma, quae elementa habet processualis classici, objecti ordinati, ac etiam programmationis functionis: conditionales ramosae, ansae, variabiles, vestitus, tabulae detrahendae, classes, errorum tractationes, ac functiones; cmdlets, and pipelines.
Tabula contentorum:
Potes scribere codicem in quovis textu editore vel ambitu evolutionis integrae utens - Facillima via est in Fenestra PowerShell ISE qui venit cum Microsoft servo systematis operantis. Hoc solum est necessarium pro scriptis satis complexis: brevia mandatorum summa faciliora sunt interactive perficienda.
Comments
Usura commentaria consideratur pars boni stili programmandi una cum incisatione propria et spatio albo:
# Для строчных комментариев используется символ решетки — содержимое строки интерпретатор не обрабатывает.
<#
Так обозначаются начало и конец блочного комментария.
Заключенный между ними текст интерпретатор игнорирует.
#>
Variabiles et eorum genera
Variabiles res in PowerShell nominantur. Eorum nomina includere possunt characterem underscore, sicut litterae et numeri. In symbolo $ semper ponitur ante nomen, et variabile declarare, satis validum nomen interpreti dare;
Ut variabilis initialize (pretium ei tribuat), operator assignationis (symbolum =) adhibetur:
$test = 100
Varium declarare potes suum genus in uncis quadratis (type mittentes operator) ante nomen vel valorem;
[int]$test = 100
$test = [int]100
Magni interest ut variabiles in PowerShell obiectis plenae sint flexae obiectis (classes) cum proprietatibus et rationibus, quarum species ab illis in .NET Core fundantur. Praecipua enumeramus:
Typus (.NET genus)
Description
Exemplum Code
[string] System.StringUnicode filum
$test = "test"
$test = 'test'
Unicode mores (XVI bits)
[char]$test = 'c' [bool] System.BooleanBoolean genus (Boolean verum vel falsum)
[bool]$test = $ true [int] System.Int32triginta duos frenum integer (32 bits)
[int]$test = 123456789 [long] System.Int64sexaginta quattuor frenum integer (LXIV bits)
[long]$test = 12345678910 [single] System.Singlefluctuetur numerus XXXII bits tempore
[single]$test = 12345.6789 [double]System.Doublefluctuetur numerus longitudinem LXIV bits (VIII bytes)
[double]$test = 123456789.101112 [decimal]System.DecimalCXXVIII-bit fluctuetur numerus (requiritur ad finem cum d)
[decimal]$test = 12345.6789d [DateTime]System.DateTimedate and time
$ Test = GetDate
[ordinata] System.Object[]an ordinata cuius elementum index incipit a 0
$test_array = 1, 2, "test", 3, 4
[Hashtable] System.Collections.HashtableNullam tabulae sunt vestimenta sociata cum clavibus nominatis aedificata ad principium: @{ key = "value"}
$test_hashtable = @{one="one"; two="two"; tria = "tres"}
PowerShell adiuvat implicitam conversionem typus, praeterea, species variabilis in muscam mutari potest (exempli gratia operante assignatione), si violenter non specificatur - hoc in casu, interpres errorem dabit. Determinare genus variabilis ex exemplo praecedenti potes methodi GetType vocando:
$test.GetType().FullName
Sunt plures cmdlets variabiles abusiones. Eorum index in forma convenienti usus praecepti ostenditur:
Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap
Ad variabiles eorumque valores declarandos visum, cmdlet speciali uti potes;
Get-Variable | more
Haec methodus nimis gravia videtur, multo commodius est operari cum variabilibus per operatores vel earum proprietates ac modos directe accessu. Sed cmdlets ius est esse, quod tibi parametros aliquos adiectis apponere permittunt. Magni interest ut usoris variabiles solum intra hodiernam sessionem definiri sint. Cum console clauso vel scriptione desinente deleta sunt.
Systema variabilium
Praeter ea quae ab utente declarantur variabiles in (system) aedificatae sunt quae post fines hodierni sessionis non deletae sunt. In duo genera dividuntur, cum PowerShell notitia civitatis reponitur in variabilibus automaticis quae in suis valoribus arbitrariis assignari non possunt. Haec includit, exempli gratia, $PWD:
$PWD.Path
Praeferentiae variabiles requiruntur ad optiones user recondendos, quarum valores mutari possunt. Exempli gratia, usura $ErrorActionPreference, mandatum interpretis reactionem ad eventum errorum non fatalium positum est.
Praeter operatores et cmdlets accessu variabiles declaratas, variabilis est: pseudo-accumulator. Cum eo operari potes per similitudinem cum aliis agitationibus, et variabiles in hoc casu similes obiecti systematis fasciculi;
Get-ChildItem Variable: | more
aut
ls Variable: | more
Scopes
Pro variabilibus in PowerShell est notio scope (Scopi). Actio scopo globali (Global) competit totius sessionis hodiernae - includit, exempli gratia, systema variabilium. Variabiles locales tantum praesto sunt in ambitu ubi definita sunt: intra functionem, dic. Est etiam notio ambitus scriptionis (Script), sed mandatum script is essentialiter localis est. Defalta, cum variabiles declarantes, scopo locali datur, et hoc mutandum, speciali instar debes construere: $Global: variabilis = valorem.
Exempli gratia;
$Global:test = 100
Environment variabilis (environment)
Alius pseudo-coegi, Env:, praesto est ab PowerShell et adhiberi potest ad variabilium ambitum accedere. Cum testa incipit, ex processu parentis expressi sunt (hoc est, ex ratione quae sessionem hodiernam initiavit) et plerumque initiales eorum bonae eaedem sunt ac valores in tabella potestate. Ad variabiles ambitus spectandas, utere Get-ChildItem cmdlet vel aliases eius (aliases): ls et dir.
dir Env:
Hae variabiles sunt series bytes (vel characteribus, si placet), quarum interpretatio tantum pendet in programmatis illis utentibus. * -Variabiles cmdlets non operantur cum variabilibus ambientibus. Accedere ad eos, uti praepositione coegi;
$env:TEST = "Hello, World!"
Arithmetica et operariorum comparatio
PowerShell praebet sequentes operatores arithmeticos: + (additio), - (detractio), * (multiplica), / (divisio), et % (modulo vel modulo). Effectus expressionis arithmeticae aestimatur a sinistro ad dextrum secundum ordinem operationum generaliter acceptum, et parenthesi adhibentur ad partes coetus locutionis. Spatia inter operatorium neglecta sunt tantum ut facilius legantur. Auctor + etiam concatenat, et * operator chordas repetit. Si numerum chordae velis addere, ad chordam convertetur. Praeterea lingua PowerShell multa habet comparationem operariorum quae reprehendo pro copula inter duos valores et reddere verum vel falsum booleanum:
operator
Description
Exemplum Code
-eq
Aequalis/aequalis (similis = vel == in linguis aliis)
$test = 100
$ test -eq 123
-not
Non aequalis / non est aequalis (similis <> vel !=)
$test = 100
$test -ne 123
-gt
Maior / More (analogus>)
$test = 100
$test -gt 123
-ge
Major vel aequalis / major vel aequalis (similis >=)
$test = 100
$test -ge 123
-lt
Minus quam / minus (similis <)
$test = 100
$ test -lt 123
-the
Minor quam vel aequalis / minor vel aequalis (similis <=)
$test = 100
$test -le 123
Aliae sunt similes operatores qui te permittunt, exempli gratia, chordas comparare innixas in cardine vel in expressionibus regularibus uti ad exemplar aequare. Eas singillatim in futuris articulis operiemus. Symbola <, > et = non ad comparationem adhibentur, quia ad alios usus adhibentur.
adsignatione operators
Praeter vilissimum = operator, sunt aliae assignationes operariorum: +=, -=, *=, /= et %=. Mutant valorem ante assignationem. Operatores unarii ++ et -, qui augent vel minuunt valorem variabilis, similiter agunt - operariorum quoque assignationem applicant.
Logica operariorum
Sola comparatio non sufficit ad describere conditiones implicatas. Locutiones logicas quasvis scribere potes utentes operatores: - vel - vel -xor, - non et!.. Operantur sicut in aliis linguis programmandi, dum parenthesi uti potes ad ordinem aestimationee definiendum:
("Тест" -eq "Тест") -and (100 -eq 100)
-not (123 -gt 321)
!(123 -gt 321)
Conditionalis Salire
Germen operariorum in PowerShell normae sunt: SI (SI ... ALIUS, SI ALSEIF…ALIUS) et SWITCH. Intueamur eorum usum cum exemplis:
[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 или значение не определено"}
}
Cycles
Testa plurium varietates habet ansarum: DUM, DUM, DUM, PRO, PRO, PROMITTERE.
A loop cum praecondicione operatur si/quandiu verum est;
[int]$test = 0
while ($test -lt 10) {
Write-Host $test
$test = $test + 1
}
Ansulae cum postconditione saltem semel current, quia post iterationem condicio deprimitur. Eodem tempore, dum opera vera est conditio, facito dum falsa est;
[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)
Numerus iterationes PRO fascia praenoscitur;
for ([int]$test = 0; $test -lt 10; $test++) {
Write-Host $test
}
In ansa prooemio, super elementa ordinatae vel collectionis iteratur (hash table);
$test_collection = "item1", "item2", "item3"
foreach ($item in $test_collection)
{
Write-Host $item
}
Arrays
PowerShell variables reponunt non solum objecta singularia (numerum, chorda, etc.), sed etiam multiplices. Simplicissimum genus earum vestium variabilium sunt. Ordinata ex pluribus elementis constare potest, unum elementum vel vacuum esse, i.e. nulla elementa continet. Declaratur usus @() operantis, quod in proximo articulo indigebimus - magni momenti est ut alias vestes ad ordinem ordinatae (multidimensionales vestes creando), vestes transeuntes ad munera sicut argumentum, et similia opera;
$test_array = @() #создаем пустой массив
Cum ordinatio initialis efficitur, eius bona per commata separata recensentur (praesertim operator ,);
$test_array = @(1, 2, 3, 4) # создаем массив из четырех элементов
In pluribus, auctor @() omitti potest:
$test_array = 1, 2, 3, 4
Hoc in casu, ordinata unius elementi initialis est ut sequitur
$test_array = , 1
Elementa ordinata sunt accessed utentes in zephyro-substructio index integer et indicem operator (uncis quadratis);
$test_array[0] = 1
Plures indices per commata distinctos nominare potes, incl. frequentissima;
$test_array = "один", "два", "три", "четыре"
$test_array[0,1,2,3]
$test_array[1,1,3,3,0]
operator ..
(Duo punctis - range operator) redit ordo integrorum intra fines superiores et inferiores definitos. Exempli gratia, expressio 1..4 outputat aciem quattuor elementorum @(1, 2, 3, 4), et dictio 8..5 outputs aciem @(8, 7, 6, 5).
Utens range operator, initialize potes ordinatam ($test_array = 1..4) vel scalpere (slice), i.e. ordo elementorum ab uno agmine cum indicibus ab altero. In hoc casu, numerus negativus -1 designat ultimum elementum ordinatae, -2 penultimum unum, et sic porro.
$test_array = "один", "два", "три", "четыре"
$test_array[0..2]
$test_array[2..0]
$test_array[-1..0]
$test_array[-2..1]
Nota quod integer valorum ordinatarum maior esse potest quam maximus index valor notitiarum ordinata. Hoc in casu, omnia bona usque ad ultimum redduntur;
$test_array[0..100]
Si unum elementum ordinatae non-existentium accedere coneris, $nullus redditur.
In PowerShell vestit elementa diversorum generum continere vel valde typum esse posse;
$test_array = 1, 2, "тест", 3, 4
for ([int]$i = 0; $i -lt $test_array.count; $i++)
{
Write-Host $test_array[$i]
}
Ubi $test_array.count proprietas est numerus elementorum ordinata.
Exemplum de creando ordinata valde aptata:
[int[]]$test_array = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Nullam tables
Alterum genus fundamentale variabilium in lingua PowerShell sunt tabulae detrahendae, etiam notae associativae vestium. Hashtables similes sunt rebus JSON et super fundamentum clavem superaedificantur. Dissimiles vestium ordinariarum, elementa eorum accesserunt nomine clauium, quae proprietates obiecti sunt (potes etiam uti index operator - brackets quadratus).
Mensa inanis Nullam declaratur utens symbolo @ et uncis operator:
$test_hashtable = @{}
Cum declarans, statim potes claves creare et bona eis assignare;
$test_hashtable = @{one="один"; two="два"; three="три"; "some key"="some value"}
Ad elementum detrahendae tabulae addere debes clavem assignare quae ei nondum exsistit vel methodo addere () uti. Si assignatio facta clavi existenti, eius valorem mutabit. Remota () methodus elementum e mensa detrahere adhibetur.
$test_hashtable."some key"
$test_hashtable["some key"]
$test_hashtable.Add("four", "четыре")
$test_hashtable.five = "пять"
$test_hashtable['five'] = "заменяем значение"
$test_hashtable.Remove("one")
Variationes huius generis praeteriri possunt argumenta ad functiones et cmdlets - in proximo articulo quomodo id fiat considerabimus, et etiam aliud genus simile consideremus - PSCustomObject.
munera
PowerShell habet omnia quae debes ad programmandi processualem, inter functiones. Ad eas describendas, munus verbi Function adhibetur, post quod nomen functionis et corporis in operante uncis inclusum denotare debes. Si rationes ad munus transire debes, eas statim post nomen in parenthesi notare potes.
function имя-функции (аргумент1, ..., аргументN)
{
тело-функции
}
Munus semper consequitur - ordinatus est eventus omnium enuntiationum, si plures sunt unum. Si una tantum enuntiatio est, sola valor correspondens speciei redditur. Reditus $valoris constructio elementum addit cum valore $ pretii ad exitum ordinatae et abortum facit exsecutionem indices enuntiationis, et munus inane redit nullum $.
Exempli causa, functionem numeri quadrantis efficiamus:
function sqr ($number)
{
return $number * $number
}
Nota quod in corpore functionis quamlibet variabilium variabilium uti potes, antequam eam vocant, ac functiones in PowerShell vocant, insolita videri potest: argumenta (si) parenthesi non includuntur et spatiis separantur.
sqr 2
vel sic:
sqr -number 2
Propter rationes viae, munus ipsum interdum parenthesi inclusum esse oportet;
function test_func ($n) {}
test_func -eq $null # функция не вызывалась
(test_func) -eq $null # результат выражения — $true
Cum munus descripseris, rationes default bonas assignare potes;
function func ($arg = value) {
#тело функции
}
Altera syntaxis est ad rationes functiones describendas, praeterea parametri ex pipelino legi possunt - haec omnia in proximo articulo in promptu erunt, cum modulos exportandos et nostros cmdlets creandos intuemur.
Error processui
PowerShell habet experimentum... Capere... Tandem mechanismum ad exceptiones tractandas. Conare clausus continet codicem in quo error occurrit, et in captura clausus manubrium continet. Si nullus error, non supplicium. Ultimus clausus exsecutus est post Conare scandalum, cuiuscumque erroris eventum, et plures capere possunt impedimenta pro diversis generibus exceptionum. Ipsa exceptio scripta est ad defectus incerto variabili ($_) et facile recuperari potest. In exemplo infra, tutelam efficimus contra valorem invalidum ineundo;
try {
[int]$test = Read-Host "Введите число"
100 / $test
} catch {
Write-Warning "Некорректное число"
Write-Host $_
}
Haec recensio fundamentalum programmandi in lingua PowerShell concludit. In sequentibus articulis accuratius operando variabilium diversorum generum, collectionum, expressionum regularium, functiones, modulos et cmdlets creando, necnon programmationem objecti ordinandam considerabimus.
Source: www.habr.com