Ajalooliselt on kĂ€suviipade tööriistad Unix-sĂŒsteemides paremad kui Windowsis, kuid uue lahenduse tulekuga on olukord muutunud.
Windows PowerShell vĂ”imaldab sĂŒsteemiadministraatoritel automatiseerida enamikku rutiinseid ĂŒlesandeid. Selle abil saab muuta seadeid, peatada ja kĂ€ivitada teenuseid ning hooldada enamikku installitud rakendustest. Sinist akent ei tasu pidada lihtsalt veel ĂŒheks kĂ€surea tĂ”lgiks; selline lĂ€henemine ei peegelda Microsofti pakutud uuenduste olemust. Tegelikult on Windows PowerShelli vĂ”imalused palju laiemad: proovime lĂŒhiartiklite tsĂŒklis vĂ€lja selgitada, kuidas Microsofti lahendus erineb meile tuttavamate vahendite seas.
PĂ”hiomadusedÂ
Loomulikult on Windows PowerShell eelkĂ”ige kĂ€surea keskkond koos skriptimise keele toetusega, mis loodi esialgu .NET Frameworki platvormi pĂ”hjal ja hiljem .NET Core'i peal. Erinevalt tĂŒhiandmeid vastu vĂ”tvatest ja tagastavatest keskkondadest töötab Windows PowerShell .NET klassidega, millel on omadused ja meetodid. PowerShell vĂ”imaldab teostada tavalisi kĂ€ske ning annab juurdepÀÀsu COM, WMI ja ADSI objektidele. Kasutatakse erinevaid talletusi, nagu failisĂŒsteem vĂ”i Windowsi register, millele on loodud nn pakkujad (providers). Tuleb mĂ€rkida, et PowerShelli tĂ€idetavaid komponente on vĂ”imalik integreerida teiste rakendustega, et teostada erinevaid toiminguid, sealhulgas graafilise liidese kaudu. Kuid tĂ”si on ka see, et paljud Windowsi rakendused pakuvad juurdepÀÀsu oma haldamise liidesele lĂ€bi PowerShelli.Â
Windows PowerShell vÔimaldab:
- Muuta operatsioonisĂŒsteemi seadeid;
- Hallata teenuseid ja protsesse;
- seadistada serveri rolle ja komponente;
- Paigaldada tarkvara;
- Hallata installitud tarkvara spetsiaalsete liideste kaudu;
- Integreerida tÀidetavaid komponente kolmandate osapoolte programmidesse;
- Luua skripte haldusĂŒlesannete automatiseerimiseks;
- Töötada failisĂŒsteemi, Windowsi registri, sertifikaadihalduri jms ĂŒle;
KĂ€suresse ja arenduskeskkonda
Windows PowerShell on eksisteerib kahes variatsioonis: lisaks kĂ€surea emulaatorile on olemas ka integreeritud skriptimiskeskkond (Integrated Scripting Environment â ISE). KĂ€surealiidesele pÀÀseb juurde, valides vastava otsetee Windowsi menĂŒĂŒst vĂ”i kĂ€ivitades powershell.exe menĂŒĂŒst 'KĂ€ita'. Ekraanil ilmub sinine aken, mis erineb oluliselt vanast cmd.exe-st. Seal on automaatne tĂ€iendamine ja muid funktsioone, mida Unix-sĂŒsteemide kĂ€sureade kasutajad tunnevad hĂ€sti.

KÀskluskeskkonnas töötamiseks tuleb meelde jÀtta mÔned otseteed:
- Ăles- ja allanuppu nĂ€itavad ajalugu, et korrata varem sisestatud kĂ€ske;
- Parem nooleklahv reaas lĂ”pus sisestab eelmise kĂ€su sĂŒmbolhaaval;
- Ctrl+Home kustutab sisestatud teksti kursorist rea alguseni;
- Ctrl+End kustutab teksti kursori kuni rea lÔpuni.
F7 nĂ€itab akent sisestatud kĂ€skudega ja vĂ”imaldab valida ĂŒhe neist. KĂ€sureas töötab samuti hiirega teksti valimine, kopeerimine ja kleepimine, kursori paigutamine, kustutamine, backspace â kĂ”ik nagu me armastame.

Windows PowerShell ISE on tĂ€islahendusega arenduskeskkond, millel on vahekaarditoe ja sĂŒntaksi esiletĂ”stmisega koodiredaktor, kĂ€skude koostaja, sisseehitatud silur ja muud programmeerijate rÔÔmud. Kui kirjutate arenduskeskkonna redigeerijas kĂ€su nime jĂ€rel sidekriipsu, saate rippmenĂŒĂŒs kĂ”ik saadaolevad parameetrid koos tĂŒĂŒbivihjetega. PowerShell ISE-i saab kĂ€ivitada kas sĂŒsteemi menĂŒĂŒst otsetee kaudu vĂ”i exĂ©cutables failiga powershell_ise.exe.

KĂ€sklusedÂ
Windows PowerShellis on ilmunud nn kĂ€sklused (cmdlets). Need on spetsialiseeritud .NET klassid, millel on mitmekesine funktsionaalsus. Neid nimetatakse 'Tegevus-Objekt' (vĂ”i 'Verb-Noun', kui teile see rohkem meeldib), ja poolitatud sidekriipsuga seos meenutab predikaati ja subjektit looduslike keelte lausetes. NĂ€iteks Get-Help tĂ€hendab sĂ”na-sĂ”nalt 'Get-Help' vĂ”i PowerShelli kontekstis: 'NĂ€ita-Abi'. Sisuliselt on see analoog Unix-sĂŒsteemide kĂ€sule man, ja PowerShellis tuleb manuaale kĂŒsida just nii, mitte kutsudes kĂ€sklusi koos vĂ”tmega âhelp vĂ”i /?. Ărge unustage ka PowerShelli veebidokumendide pĂ”hjalikkust, Microsoftil on need piisavalt detailsed.
Lisaks Get-le kasutatakse kÀskude tÀhendamiseks ka teisi tegusÔnu (ja mitte ainult tegusÔnu, rangelt vÔttes). Allpool toome mÔned nÀited:
Lisa â lisa;
Kustuta â puhasta;
Enable â lĂŒlita sisse;
Keela â lĂŒlita vĂ€lja;
Uus â loo;
Eemalda â eemalda;
Seada â mÀÀra;
Alusta â kĂ€ivita;
Peata â peata;
Export â ekspordi;
Importida â impordi.
On olemas sĂŒsteemi-, kasutaja- ja valikulised kĂ€skud, mille tĂ€itmise tulemusena tagastatakse alati objekt vĂ”i objektide massiiv. Nad ei ole suurustundlikud, st tĂ”lgendaja jaoks ei ole tellimuste vahel vahet Get-Help ja get-help. Eraldamiseks kasutatakse sĂŒmbolit â;â, kuid seda tuleb kasutada ainult siis, kui ĂŒhel real tĂ€idetakse mitu kĂ€sku.Â
Windows PowerShelli kÀsud kogunevad mooduliteks (NetTCPIP, Hyper-V jne) ning objekti ja tegevuse otsimiseks on olemas kÀsk Get-Command. Selle kohta juhendi kuvamiseks saab teha jÀrgmist:
Get-Help Get-Command 
Vaikimisi kuvab kĂ€sk lĂŒhijuhendi, kuid kĂ€skudele saab vajadusel edastada parameetreid (argumente). Nende abil saab, nĂ€iteks, saada ĂŒksikasjalikku (parameeter -Detailed) vĂ”i tĂ€ielikku (parameeter -Full) juhendit ning kuvada ekraanile nĂ€iteid (parameeter -Examples):
Get-Help Get-Command -ExamplesWindows PowerShelli juhendit uuendatakse kĂ€suga Update-Help. Kui kĂ€sk muutub liiga pikaks, saab kĂ€su argumendid viia jĂ€rgmisele reale, kirjutades erisĂŒmboli â`â ja vajutades Enter â lihtsalt lĂ”petada kĂ€sku ĂŒhe real ja jĂ€tkata teisel ei Ă”nnestu.
Allpool toome mĂ”ned levinud kĂ€skude nĂ€ited:Â
Get-Process â kuva sĂŒsteemis kĂ€ivitatud protsessid;
Get-Service â kuva teenused ja nende seisund;
Get-Content â kuvada faili sisu.
Tihti kasutatavate kĂ€skude ja vĂ€liste utiliitide jaoks on Windows PowerShellis lĂŒhikesed sĂŒnonĂŒĂŒmid â aliasd (ingl. k. Alias). NĂ€iteks, dir â alias Get-ChildItem. SĂŒnonĂŒĂŒmide hulgas on ka Unix-sĂŒsteemide kĂ€sud (ls, ps jne), ja kĂ€sku Get-Help kutsutakse vĂ€lja kĂ€suga help. TĂ€ieliku sĂŒnonĂŒĂŒmide nimekirja saab vaadata kĂ€suga Get-Alias:

Skripti, funktsiooni, mooduli ja PowerShelli keel
Windows PowerShell skriptid salvestatakse tavalistes tekstifailides laiendiga .ps1. Neid ei saa kaheastmeliselt avada: konteksti menĂŒĂŒ avamiseks tuleb hiire parema nupuga klĂ”psata ja valida âKĂ€ivita PowerShellisâ. Konsoolis tuleb kas nĂ€idata skripti tĂ€israda vĂ”i minna vastavasse katalooge ja kirjutada faili nimi. Skriptide kĂ€ivitamine on samuti piiratud sĂŒsteemipoliitika poolt ning praeguseid seadeid saab kontrollida Get-ExecutionPolicy kĂ€su abil, mis annab ĂŒhe jĂ€rgmistest vÀÀrtustest:
Restricted â skriptide kĂ€ivitamine on keelatud (vaikimisi);
AllSigned â lubatud on ainult usaldusvÀÀrse arendaja allkirjastatud skriptide kĂ€ivitamine;
RemoteSigned â lubatud on allkirjastatud ja kohalike skriptide kĂ€ivitamine;
Unrestricted â lubatud on igasuguste skriptide kĂ€ivitamine.
Administraatoril on kaks vĂ”imalust. Ohutum variant eeldab skriptide allkirjastamist, kuid see on ĂŒsna tĂ”sine trikk â seda arutame jĂ€rgmistes artiklites. Praegu liigume lihtsama vastuseisu teed ja muudame poliitikat:
Set-ExecutionPolicy RemoteSigned 
PowerShell tuleb selleks kÀivitada administraatorina, kuigi spetsiaalse parameetri abil on vÔimalik poliitikat muuta ka praeguse kasutaja jaoks.
Skriptid kirjutatakse objektorienteeritud programmeerimiskeeles, mille kĂ€sud on nimetatud samamoodi nagu varem kĂ€sitletud kĂ€sklused: âTegevus-Objektâ (âVerb-Nounâ). Selle pĂ”hiĂŒlesanne on haldustegevuste automatiseerimine, kuid see on tĂ€ieĂ”iguslik tĂ”lgitav keel, milles on kĂ”ik vajalikud konstruktsioonid: tingimuslikud ĂŒleminekud, tsĂŒklid, muutujad, massiivid, objektid, veahaldus jne. Skriptide kirjutamiseks sobib iga tekstiredaktor, kuid kĂ”ige mugavam on kĂ€ivitada Windows PowerShell ISE.
Skripti saab edastada parameetreid, muuta need kohustuslikuks ja mÀÀrata vaikevÀÀrtusi. Lisaks vÔimaldab Windows PowerShell luua funktsioone ja neid kutsuda tÀpselt nagu kÀske: selleks kasutatakse konstruktsiooni Function ja kaarekujulisi sulgusid. Skript, mis sisaldab funktsioone, nimetatakse mooduliks ja sellel on laiend .psm1. Moodulid peavad olema salvestatud kataloogidesse, mis on mÀÀratletud PowerShelli keskkonna muutujates. Nende vaatamiseks saab kasutada jÀrgmist kÀsku:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSizeKonveierid
Viimases nĂ€ites kasutasime Unix-sĂŒsteemide kasutajatele tuttavat konstruktsiooni. Windows PowerShellis vĂ”imaldab vertikaalne toru samuti ĂŒhe kĂ€su vĂ€ljundi edastamist teise kĂ€su sisendisse, kuid konveieri rakenduses on ka oluline erinevus: tegemist on juba mitte tĂ€hemĂ€rkide kogumi vĂ”i mingi tekstiga. Sisseehitatud cmdlet'id vĂ”i kasutaja funktsioonid tagastavad objekte vĂ”i objektide massiive ning vĂ”ivad neid ka sisendina vastu vĂ”tta. Nagu Bourne shellis ja selle paljudes jĂ€rgijates, lihtsustab PowerShell konveieri abil keerukate ĂŒlesannete tĂ€itmist.
Lihtsaim konveieri nÀide on jÀrgmine:
Get-Service | Sort-Object -property Status 
Esmalt tĂ€idetakse cmdlet Get-Service ja seejĂ€rel edastatakse kĂ”ik saadud teenused sorteerimisele cmdlet'ile Sort-Object vastavalt omadusele Status. See, millises argumendis edastatakse eelmise konveieri lĂ”igu tulemused, sĂ”ltub selle tĂŒĂŒbist â tavaliselt on see InputObject. TĂ€iendavat teavet kĂ€sitletakse PowerShelli programmeerimiskeele kohta eraldi artiklis.Â
Kui soovite, vĂ”ib ahelat jĂ€tkata ja edastada Sort-Object'i töö tulemuse veel ĂŒhele cmdlet'ile (need tĂ€idetakse vasakult paremale). Muide, Windowsi kasutajatele on juurdepÀÀsetav ka tuttav Unix'i konstruktsioon lehekĂŒljelise vĂ€ljundi jaoks:Â
Get-Service | Sort-Object -property Status | moreTaustĂŒlesannete kĂ€ivitamineÂ
Sageli on vajalik kÀivitada mingi kÀsk taustal, et mitte oodata selle tÀitmise tulemust shelli seansis. Windows PowerShellis on sellisel juhul mitu cmdlet'i:
Start-Job â taustĂŒlesande kĂ€ivitamine;
Stop-Job â taustĂŒlesande peatamine;
Get-Job â taustĂŒlesannete nimekirja vaatamine;
Receive-Job â taustĂŒlesande tĂ€itmise tulemuse vaatamine;
Remove-Job â taustĂŒlesande eemaldamine;
Wait-Job â taustĂŒlesande viimine tagasi konsooli.
TaustĂŒlesande kĂ€ivitamiseks kasutame cmdlet'i Start-Job ja sulgudes mÀÀrame kĂ€su vĂ”i kĂ€skude komplekti:
Start-Job {Get-Service} 
Windows PowerShellis saab taustĂŒlesandeid hallata nende nimede kaudu. Alustuseks Ă”pime neid kuvama:
Get-Job 
NĂŒĂŒd nĂ€itame ĂŒlesande Job1 tĂ€itmise tulemust:
Receive-Job Job1 | more 
KĂ”ik on ĂŒsna lihtne.
KaugkÀskude tÀitmine
Windows PowerShell vÔimaldab kÀivitada kÀske ja skripte mitte ainult kohalikul, vaid ka kaugmasinal ja isegi terve grupi masinate puhul. Selleks on mitmeid viise:
- Paljude cmdlet'ide puhul on parameeter
-ComputerName, kuid sellise meetodi abil ei ole vÔimalik nÀiteks luua torujuhet; - Cmdlet
Enter-PSSessionlubab luua kaugmasinas interaktiivse seansi;Â - Cmdleti abil
Invoke-CommandvĂ”ib kĂ€ivitada kĂ€sklusi vĂ”i skripte ĂŒhel vĂ”i mitmel kaugmasinal.
PowerShelli versioonid
Alates esimesest vĂ€ljalaskest aastal 2006 on PowerShell tĂ”siselt muutunud. Tööriist on saadaval paljudele sĂŒsteemidele, mis töötavad erinevatel riistvaraplatvormidel (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux ja OS X. Viimane vĂ€ljalase 6.2 ilmus 10. jaanuaril 2018. Varasematele versioonidele kirjutatud skriptid töötavad suure tĂ”enĂ€osusega hilisemates versioonides, kuid tagasipöörderikkumisega vĂ”ivad esineda probleemid, kuna PowerShellis on aastate jooksul ilmunud suur hulk uusi cmdlet'e. Arvuti installitud kĂ€surealiidese versiooni saab teada, kasutades omadust PSVersion muutuja $PSVersionTable:
$PSVersionTable.PSVersion 
Samuti vÔib kasutada cmdleti:
Get-Variable -Name PSVersionTable âValueOnly 
Sama asja teeb ka cmdlet Get-Host. Tegelikult on vĂ”imalusi palju, kuid nende rakendamiseks tuleb Ă”ppida PowerShelli programmeerimiskeelt, millega me tegeleme .Â
SummaryÂ
Microsoftil Ă”nnestus luua tĂ”eliselt vĂ”imas kĂ€surealiides mugava integreeritud keskkonnaga skriptide arendamiseks. Erinevalt meie tuttavatest Unix'i tööriistadest eristab seda sĂŒgav integreeritus Windowsi operatsioonisĂŒsteemide, nende jaoks mĂ”eldud tarkvara ja .NET Core platvormiga. PowerShelli vĂ”ib nimetada objektorienteeritud liideseks, kuna cmdlet'id ja kasutaja funktsioonid tagastavad objekte vĂ”i objektide massi ja saavad neid sisendina. Arvame, et see tööriist peaks olema iga Windowsi serverihalduri valduses: aeg on möödas, kui nad said hakkama ilma kĂ€surida. Arenenud kĂ€surealiides on eriti vajalik , aga see on juba tĂ€iesti teine lugu.
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Milliseid teemasid tasub kindlasti jÀrgnevates artiklites kÀsitleda?
53,2%PowerShelli programmeerimine
42,4%PowerShelli funktsioonid ja moodulid
22,1%Kuidas allkirjastada oma skripte?
12,1%Töötlusandmete haldamine kaudu pakkujate (providers) abil
57,6%Kaugtöötluse automatiseerimine PowerShelli abil
30,7%Tarkvara haldamine ja PowerShelli tĂ€itmisĂŒlesannete integreerimine kolmandate osapoolte toodetesse
Kokku hÀÀletas 231 kasutajat. 37 kasutajat jÀi erakuks.
Allikas: habr.com
