VÄsturiski komandrindas utilÄ«tas Unix sistÄmÄs ir labÄk izstrÄdÄtas nekÄ Windows, taÄu lÄ«dz ar jauna risinÄjuma parÄdÄ«Å”anos situÄcija ir mainÄ«jusies.
Windows PowerShell ļauj sistÄmas administratoriem automatizÄt lielÄko daļu ikdienas uzdevumu. Ar to jÅ«s varat mainÄ«t iestatÄ«jumus, apturÄt un sÄkt pakalpojumus, kÄ arÄ« veikt apkopi lielÄkajÄ daÄ¼Ä instalÄto lietojumprogrammu. BÅ«tu nepareizi uztvert zilo logu kÄ citu komandu tulku. Å Ä« pieeja neatspoguļo Microsoft piedÄvÄto jauninÄjumu bÅ«tÄ«bu. PatiesÄ«bÄ Windows PowerShell iespÄjas ir daudz plaÅ”Äkas: Ä«sÄ rakstu sÄrijÄ mÄÄ£inÄsim noskaidrot, ar ko Microsoft risinÄjums atŔķiras no mums vairÄk pazÄ«stamajiem rÄ«kiem.
GalvenÄs iezÄ«mes
Protams, Windows PowerShell galvenokÄrt ir skriptu apvalks, kas sÄkotnÄji tika izveidots uz .NET Framework un vÄlÄk uz .NET Core. AtŔķirÄ«bÄ no ÄaulÄm, kas pieÅem un atgriež teksta datus, Windows PowerShell darbojas ar .NET klasÄm, kurÄm ir rekvizÄ«ti un metodes. PowerShell ļauj palaist parastas komandas, kÄ arÄ« nodroÅ”ina piekļuvi COM, WMI un ADSI objektiem. Tas izmanto dažÄdas krÄtuves, piemÄram, failu sistÄmu vai Windows reÄ£istru, kuriem piekļūt t.s. pakalpojumu sniedzÄji. VÄrts atzÄ«mÄt iespÄju PowerShell izpildÄmos komponentus iegult citÄs lietojumprogrammÄs, lai realizÄtu dažÄdas darbÄ«bas, t.sk. izmantojot grafisko interfeisu. Ir arÄ« otrÄdi: daudzas Windows lietojumprogrammas nodroÅ”ina piekļuvi savÄm pÄrvaldÄ«bas saskarnÄm, izmantojot PowerShell.
Windows PowerShell ļauj:
- MainÄ«t operÄtÄjsistÄmas iestatÄ«jumus;
- PÄrvaldÄ«t pakalpojumus un procesus;
- KonfigurÄt servera lomas un komponentus;
- instalÄt programmatÅ«ru;
- PÄrvaldÄ«t instalÄto programmatÅ«ru, izmantojot Ä«paÅ”as saskarnes;
- Iegult izpildÄmos komponentus treÅ”o puÅ”u programmÄs;
- Izveidot skriptus, lai automatizÄtu administrÄÅ”anas uzdevumus;
- Darbs ar failu sistÄmu, Windows reÄ£istru, sertifikÄtu krÄtuvi utt.
Apvalks un izstrÄdes vide
Windows PowerShell ir divos veidos: papildus konsoles emulatoram ar komandu apvalku ir arÄ« integrÄtÄ skriptÄÅ”anas vide (ISE). Lai piekļūtu komandrindas saskarnei, Windows izvÄlnÄ vienkÄrÅ”i atlasiet atbilstoÅ”o saÄ«sni vai izvÄlnÄ Palaist palaidiet powershell.exe. EkrÄnÄ parÄdÄ«sies zils logs, kura iespÄjas ievÄrojami atŔķiras no faila antediluvian cmd.exe. Ir automÄtiskÄ pabeigÅ”ana un citas funkcijas, kas ir pazÄ«stamas Unix sistÄmu komandu Äaulu lietotÄjiem.
Lai strÄdÄtu ar Äaulu, ir jÄatceras daži Ä«sinÄjumtaustiÅi:
- AugÅ”up un lejup vÄrstÄs bultiÅas ritina vÄsturi, lai atkÄrtotu iepriekÅ” ievadÄ«tÄs komandas;
- LabÄ bultiÅa rindas beigÄs pÄrraksta iepriekÅ”ÄjÄs komandas rakstzÄ«mi pÄc rakstzÄ«mes;
- Ctrl+Home izdzÄÅ” drukÄto tekstu no kursora pozÄ«cijas lÄ«dz rindas sÄkumam;
- Ctrl+End izdzÄÅ” tekstu no kursora lÄ«dz rindas beigÄm.
F7 parÄda logu ar drukÄtÄm komandÄm un ļauj izvÄlÄties vienu no tÄm. Konsole darbojas arÄ« ar teksta atlasi ar peli, kopÄÅ”anu-ielÄ«mÄÅ”anu, kursora pozicionÄÅ”anu, dzÄÅ”anu, atkÄpÅ”anos ā visu, kas mums patÄ«k.
Windows PowerShell ISE ir pilnÄ«ga izstrÄdes vide ar cilnÄm un sintakses izceltu koda redaktoru, komandu veidotÄju, iebÅ«vÄtu atkļūdotÄju un citiem programmÄÅ”anas priekiem. Ja izstrÄdes vides redaktorÄ aiz komandas nosaukuma ierakstÄt defisi, visas pieejamÄs opcijas tiks parÄdÄ«tas nolaižamajÄ sarakstÄ ar norÄdi par veidu. PowerShell ISE var palaist, izmantojot sistÄmas izvÄlnes saÄ«sni vai izpildÄmo failu powershell_ise.exe.
Cmdlets
ProgrammÄ Windows PowerShell tÄ sauktÄ. cmdlet. TÄs ir specializÄtas .NET klases, kas nodroÅ”ina dažÄdas funkcionalitÄtes. Tos sauc par darbÄ«bas objektu (vai darbÄ«bas vÄrdu-lietvÄrdu, ja vÄlaties), un ar defisi atdalÄ«tÄ saite atgÄdina predikÄtu un subjektu dabiskÄs valodas teikumos. PiemÄram, Get-Help burtiski nozÄ«mÄ āSaÅemt palÄ«dzÄ«buā vai PowerShell kontekstÄ: āRÄdÄ«t palÄ«dzÄ«buā. Faktiski Ŕī ir komandas man analogs Unix sistÄmÄs, un PowerShell rokasgrÄmatas ir jÄpieprasa Å”ÄdÄ veidÄ, nevis izsaucot cmdlet ar taustiÅu --help vai /?. Neaizmirstiet par tieÅ”saistes PowerShell dokumentÄciju: Microsoft to piedÄvÄ diezgan detalizÄti.
Papildus Get, cmdlet izmanto citus darbÄ«bas vÄrdus, lai apzÄ«mÄtu darbÄ«bas (un ne tikai darbÄ«bas vÄrdus, stingri runÄjot). ZemÄk esoÅ”ajÄ sarakstÄ mÄs sniedzam dažus piemÄrus:
Add
- pievienot;
Clear
- skaidrs;
Enable
- ieslÄdz;
Disable
- izslÄgt;
New
- radīt;
Remove
- dzÄst;
Set
- jautÄt;
Start
- skriet;
Stop
- apstÄties;
Export
- eksports;
Import
- imports.
Ir sistÄmas, lietotÄja un izvÄles cmdlet: izpildes rezultÄtÄ tie visi atgriež objektu vai objektu masÄ«vu. Tie nav reÄ£istrjutÄ«gi, t.i. no komandu tulka viedokļa nav nekÄdas atŔķirÄ«bas starp Get-Help un get-help. AtdalÄ«Å”anai tiek izmantota rakstzÄ«me ';', taÄu tÄ ir obligÄti jÄievieto tikai tad, ja vienÄ rindÄ tiek izpildÄ«tas vairÄkas cmdlet.
Windows PowerShell cmdlet ir sagrupÄtas moduļos (NetTCPIP, Hyper-V utt.), un ir Get-Command cmdlet, lai meklÄtu pÄc objekta un darbÄ«bas. Varat parÄdÄ«t palÄ«dzÄ«bu Å”Ädi:
Get-Help Get-Command
PÄc noklusÄjuma komanda parÄda Ä«su palÄ«dzÄ«bu, bet parametri (argumenti) pÄc vajadzÄ«bas tiek nodoti cmdlet. Ar viÅu palÄ«dzÄ«bu jÅ«s varat, piemÄram, iegÅ«t detalizÄtu (parametrs -Detailed) vai pilnu (parametrs -Full) palÄ«dzÄ«bu, kÄ arÄ« parÄdÄ«t piemÄrus (parameter -Examples):
Get-Help Get-Command -Examples
PalÄ«dzÄ«ba programmÄ Windows PowerShell tiek atjauninÄta, izmantojot cmdlet Update-Help. Ja komandrinda izrÄdÄs par garu, cmdlet argumentus var pÄrvietot uz nÄkamo, ierakstot servisa rakstzÄ«mi '`' un nospiežot Enter ā pabeidzot komandas rakstÄ«Å”anu vienÄ rindÄ un turpinot citÄ, nedarbosies.
Å eit ir daži izplatÄ«tu cmdlet piemÄri:
Get-Process
- parÄdÄ«t darbojoÅ”os procesus sistÄmÄ;
Get-Service
ā parÄdÄ«t pakalpojumus un to statusu;
Get-Content
- parÄdÄ«t faila saturu.
Bieži izmantotajÄm cmdlet un ÄrÄjÄm utilÄ«tprogrammÄm Windows PowerShell ir Ä«si sinonÄ«mi - aizstÄjvÄrdi (no angļu valodas. Alias). PiemÄram, dir ir Get-ChildItem aizstÄjvÄrds. SinonÄ«mu sarakstÄ ir arÄ« komandu analogi no Unix sistÄmÄm (ls, ps utt.), un Get-Help cmdlet tiek izsaukta ar palÄ«dzÄ«bas komandu. Pilnu sinonÄ«mu sarakstu var skatÄ«t, izmantojot Get-Alias cmdlet:
Skripti, funkcijas, moduļi un PowerShell valoda
Windows PowerShell skripti tiek glabÄti kÄ vienkÄrÅ”a teksta faili ar paplaÅ”inÄjumu .ps1. Tos nevar palaist, veicot dubultklikŔķi: ar peles labo pogu noklikŔķiniet, lai atvÄrtu konteksta izvÄlni un atlasiet vienumu āPalaist PowerShellā. No konsoles jums bÅ«s vai nu jÄnorÄda pilns ceļŔ uz skriptu, vai arÄ« jÄiet uz atbilstoÅ”o direktoriju un jÄieraksta faila nosaukums. Skriptu palaiÅ”anu ierobežo arÄ« sistÄmas politika, un, lai pÄrbaudÄ«tu paÅ”reizÄjos iestatÄ«jumus, varat izmantot cmdlet Get-ExecutionPolicy, kas atgriezÄ«s vienu no Ŕīm vÄrtÄ«bÄm:
Restricted
ā skriptu palaiÅ”ana ir atspÄjota (pÄc noklusÄjuma);
AllSigned
- atļauta tikai uzticama izstrÄdÄtÄja parakstÄ«tu skriptu palaiÅ”ana;
RemoteSigned
- atļauts palaist parakstītus un savus skriptus;
Unrestricted
- atļauts palaist jebkÄdus skriptus.
Administratoram ir divas iespÄjas. VisdroÅ”Äkais ir skriptu parakstÄ«Å”ana, taÄu tÄ ir diezgan nopietna burvÄ«ba - mÄs to aplÅ«kosim turpmÄkajos rakstos. Tagad iesim mazÄkÄs pretestÄ«bas ceļu un mainÄ«sim politiku:
Set-ExecutionPolicy RemoteSigned
Lai to izdarÄ«tu, PowerShell bÅ«s jÄpalaiž kÄ administratoram, lai gan paÅ”reizÄjÄ lietotÄja politiku varat mainÄ«t ar Ä«paÅ”u iestatÄ«jumu.
Skripti tiek rakstÄ«ti objektorientÄtÄ programmÄÅ”anas valodÄ, kuras komandas tiek nosauktas pÄc tÄda paÅ”a principa kÄ iepriekÅ” apspriestajÄm cmdlet: āAction-Objectā (āDarbÄ«bas vÄrds-Nounā). TÄs galvenais mÄrÄ·is ir automatizÄt administratÄ«vos uzdevumus, taÄu tÄ ir pilnvÄrtÄ«ga interpretÄta valoda, kurÄ ir visas nepiecieÅ”amÄs konstrukcijas: nosacÄ«juma lÄciens, cilpas, mainÄ«gie, masÄ«vi, objekti, kļūdu apstrÄde utt. JebkurÅ” teksta redaktors ir piemÄrots skriptÄÅ”anai, taÄu vislabÄk ir palaist Windows PowerShell ISE.
Varat nodot parametrus skriptam, padarÄ«t tos par obligÄtu un iestatÄ«t noklusÄjuma vÄrtÄ«bas. TurklÄt programma Windows PowerShell ļauj izveidot un izsaukt funkcijas tÄpat kÄ cmdlet, izmantojot konstrukciju Function un cirtainas figÅ«riekavas. Skriptu ar funkcijÄm sauc par moduli, un tam ir .psm1 paplaÅ”inÄjums. Moduļi ir jÄglabÄ direktorijos, kas definÄti PowerShell vides mainÄ«gajos. JÅ«s varat tos apskatÄ«t ar Å”Ädu komandu:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSize
Konveijeri
PÄdÄjÄ piemÄrÄ mÄs izmantojÄm konstrukciju, kas ir pazÄ«stama Unix apvalka lietotÄjiem. OperÄtÄjsistÄmÄ Windows PowerShell vertikÄlÄ josla ļauj arÄ« nodot vienas komandas izvadi citas komandas ievadei, taÄu konveijera ievieÅ”anÄ ir bÅ«tiska atŔķirÄ«ba: mÄs vairs nerunÄjam par rakstzÄ«mju kopu vai kaut kÄdu tekstu. IebÅ«vÄtÄs cmdlet vai lietotÄja definÄtas funkcijas atgriež objektus vai objektu masÄ«vus un var arÄ« saÅemt tos kÄ ievadi. TÄpat kÄ Bourne apvalks un daudzi tÄ pÄcteÄi, arÄ« PowerShell ar konveijera palÄ«dzÄ«bu atvieglo sarežģītus uzdevumus.
VienkÄrÅ”Äkais cauruļvada piemÄrs izskatÄs Å”Ädi:
Get-Service | Sort-Object -property Status
Vispirms tiek izpildÄ«ts Get-Service cmdlet, un pÄc tam visi ar to saÅemtie pakalpojumi tiek nodoti cmdlet Sort-Object kÄrtoÅ”anai pÄc rekvizÄ«ta Statuss. Kuram argumentam tiek nodots konveijera iepriekÅ”ÄjÄs sadaļas rezultÄts, ir atkarÄ«gs no tÄ veida - parasti tas ir InputObject. Å is jautÄjums tiks apspriests sÄ«kÄk rakstÄ, kas veltÄ«ts PowerShell programmÄÅ”anas valodai.
Ja vÄlaties, varat turpinÄt Ä·Ädi un nodot Sort-Object darbÄ«bas rezultÄtu citai cmdlet (tie tiks izpildÄ«ti no kreisÄs puses uz labo). Starp citu, Windows lietotÄjiem ir pieejama arÄ« lappuÅ”u veidoÅ”anas konstrukcija, kas ir pazÄ«stama visiem Unixoid:
Get-Service | Sort-Object -property Status | more
Uzdevumu izpilde fonÄ
Diezgan bieži ir nepiecieÅ”ams fonÄ palaist noteiktu komandu, lai Äaulas sesijÄ nebÅ«tu jÄgaida tÄs izpildes rezultÄts. Å im gadÄ«jumam Windows PowerShell ir vairÄkas cmdlet:
Start-Job
- fona uzdevuma palaiŔana;
Stop-Job
ā apturÄt fona uzdevumu;
Get-Job
ā apskatÄ«t fona uzdevumu sarakstu;
Receive-Job
ā fona uzdevuma izpildes rezultÄta apskate;
Remove-Job
ā fona uzdevuma dzÄÅ”ana;
Wait-Job
- fona uzdevuma pÄrsÅ«tÄ«Å”ana atpakaļ uz konsoli.
Lai sÄktu fona uzdevumu, mÄs izmantojam cmdlet Start-Job un cirtainos iekavÄs norÄdÄm komandu vai komandu kopu:
Start-Job {Get-Service}
Windows PowerShell fona uzdevumus var manipulÄt, zinot to nosaukumus. Vispirms uzzinÄsim, kÄ tos parÄdÄ«t:
Get-Job
Tagad parÄdÄ«sim darba Job1 rezultÄtu:
Receive-Job Job1 | more
Viss ir diezgan vienkÄrÅ”i.
AttÄlÄs komandas izpilde
Windows PowerShell ļauj izpildÄ«t komandas un skriptus ne tikai lokÄlajÄ datorÄ, bet arÄ« attÄlajÄ datorÄ un pat veselÄ iekÄrtu grupÄ. Ir vairÄki veidi, kÄ to izdarÄ«t:
- DaudzÄm cmdlet ir parametrs
-ComputerName
, bet tÄdÄ veidÄ nedarbosies, piemÄram, izveidot konveijeru; - Cmdlet
Enter-PSSession
ļauj izveidot interaktÄ«vu sesiju attÄlÄ maŔīnÄ; - Izmantojot cmdlet
Invoke-Command
varat palaist komandas vai skriptus vienÄ vai vairÄkos attÄlos datoros.
PowerShell versijas
PowerShell ir daudz mainÄ«jies kopÅ” tÄs pirmÄs izlaiÅ”anas 2006. gadÄ. Å is rÄ«ks ir pieejams daudzÄm sistÄmÄm, kas darbojas dažÄdÄs aparatÅ«ras platformÄs (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 un OS X. JaunÄkais 6.2 laidiens tika izlaists 10. gada 2018. janvÄrÄ«. Skripti, kas rakstÄ«ti iepriekÅ”ÄjÄm versijÄm, visticamÄk, darbosies jaunÄkÄs versijÄs, taÄu atpakaļportÄÅ”ana var bÅ«t problemÄtiska, jo PowerShell izstrÄdes gadu laikÄ ir ieviesusi lielu skaitu jaunu cmdlet. DatorÄ instalÄtÄs komandas Äaulas versiju var uzzinÄt, izmantojot iebÅ«vÄtÄ mainÄ«gÄ $PSVersionTable rekvizÄ«tu PSVersion:
$PSVersionTable.PSVersion
Varat arī izmantot cmdlet:
Get-Variable -Name PSVersionTable āValueOnly
Tas pats tiek darÄ«ts ar cmdlet Get-Host. Faktiski ir daudz iespÄju, taÄu, lai tÄs izmantotu, ir jÄapgÅ«st PowerShell programmÄÅ”anas valoda, ko mÄs darÄ«sim
RezultÄti
Microsoft ir izdevies izveidot patieÅ”Äm jaudÄ«gu apvalku ar Ärtu integrÄtu vidi skriptu izstrÄdei. No mums Unix pasaulÄ pazÄ«stamajiem rÄ«kiem tas atŔķiras ar dziļu integrÄciju ar Windows saimes operÄtÄjsistÄmÄm, kÄ arÄ« ar tÄm paredzÄto programmatÅ«ru un .NET Core platformu. PowerShell var saukt par objektorientÄtu apvalku, jo cmdlet un lietotÄja definÄtas funkcijas atgriež objektus vai objektu masÄ«vus un var tos izmantot kÄ ievadi. MÄs domÄjam, ka visiem Windows serveru administratoriem vajadzÄtu piederÄt Å”im rÄ«kam: ir pagÄjis laiks, kad viÅi varÄja iztikt bez komandrindas. ÄŖpaÅ”i nepiecieÅ”ams uzlabots konsoles apvalks
AptaujÄ var piedalÄ«ties tikai reÄ£istrÄti lietotÄji.
KÄdas tÄmas vispirms bÅ«tu jÄaplÅ«ko nÄkamajos sÄrijas rakstos?
-
53,2%ProgrammÄÅ”ana programmÄ PowerShell123
-
42,4%PowerShell98 funkcijas un moduļi
-
22,1%K parakstīt savus skriptus?51
-
12,1%Darbs ar krÄtuvÄm, izmantojot pakalpojumu sniedzÄjus (providers)28
-
57,6%Datoru administrÄÅ”anas automatizÄcija, izmantojot PowerShell133
-
30,7%ProgrammatÅ«ras pÄrvaldÄ«ba un PowerShell izpildÄmo failu iegulÅ”ana treÅ”o puÅ”u produktos71
Nobalsoja 231 lietotÄjs. 37 lietotÄji atturÄjÄs.
Avots: www.habr.com