Ekraanitõmmis PowerShelli kasutamisest.
**Windows PowerShell** on Microsofti ülesannete automatiseerimise ja konfigureerimise haldustööriist, mis koosneb käsuinterpretaatorist ja skriptimiskeelest ning on loodud .NET-raamistikus. PowerShell võimaldab täielikku ligipääsu COM-ile ja WMI-le, võimaldades administraatoritel sooritada administreerivaid ülesandeid nii kohalikes kui ka kaugjuhitavates Windowsi süsteemides. Samuti võimaldab PowerShell ligipääsu WS-Managementile ja CIM-ile, mis võimaldavad kaughallata Linuxi süsteeme ja interneti seadmeid.

Üldiselt sooritatakse PowerShellis administreerivaid ülesandeid *cmdlets*'e kasutades, mis on spetsiaalsed .NET klasside spetsiifilised operatsioonid. *cmdlets*-e saab omavahel kombineerida moodustades skripte, eraldiseisvaid programme või luues tavalisi .NET klasse (või WMI/COM objekte). Need töötavad pääsedes ligi andmetele erinevates andmekogudes nagu näiteks failisüsteemid ja registrid, mis on kättesaadavad PowerShellile läbi Windows PowerShelli teenusepakkujate.

Windows PowerShell pakub majutust API-le, millega Windows PowerShelli saab manustada teistesse programmidesse. Need programmid saavad sellisel juhul kasutada Windows PowerShelli funktsionaalsust, et rakendada kindlaid operatsioone; nende hulka kuuluvad ka sellised programmid mida, muidu juhitakse graafilise liidese abil. Seda võimalust kasutab Microsoft Exchange Server 2007, mis võimaldab oma juhtimisfunktsioone kirjutada PowerShell *cdmlet*'idena. Teised Microsofti rakendused, näiteks Microsoft SQL Server 2008, võimaldavad samuti ära kasutada PowerShell *cmdlets*'e.

Windows PowerShell sisaldab oma mahukat konsoolipõhist spikrit, mis sarnaneb man pagesiga Unixi shellis. Sellele pääseb ligi *cmdlet*iga `Get-Help` ning seda saab uuendada värske sisuga kasutades *cmdlet*ti `Update-Help`.

Taustainfo
----------

Iga Microsoft DOSi ja Microsoft Windowsi väljalase personaalarvutitele on sisaldanud käsuinterpretaatorit. Nendeks on COMMAND.COM (tuli kaasa MS-DOS installatsiooniga) ja cmd.exe (Windows NT perekonna operatsioonisüsteemidele). *Shell* ehk käsureainterpretaator toetab tähtsamaid põhikäske. Nõudlikemate ülesannete puhul tuleb eraldi konsoolirakendus välja kutsuda. *Shell* sisaldas ka skriptimiskeelt (batchfailid), mida saab kasutada erinevate ülesannete automatiseerimiseks. Siiski ei saa *shelli* kasutada, et automatiseerida GUI funktsionaalsuse kõiki tahke. Seda osaliselt seetõttu, et käsurea käskude vasted graafilise liidese võimalustele on piiratud ja osaliselt seetõttu, et skriptimiskeel on algeline ning ei võimalda luua keerulisi skripte. Windows Server 2003-s olukord paranes, aga skriptimisvõimalusi peeti ikkagi mitterahuldavateks.

Microsoft üritas neid puudujääke parandada, tutvustades 1998. aastal Windows Script Hosti Windows 98-le ja selle käsureahosti `cscript.exe`. See lõimub Active Script mootoriga ja lubab skripte kirjutada ühilduvates keeltes, nagu näiteks JScript ja VBScript, mõjutades rakenduste APIsid COM abil. Kuid sellel on ka omad puudused: see ei ole integreeritud *shelli*, selle dokumentatsioon pole kergesti kättesaadav ja see sai endale süsteemi nõrga lüli maine pärast seda, kui mitu prominentset arvutiviirust kasutasid ära selle turvaauke. Erinevad Windowsi versioonid pakkusid mitmesuguseid eriotstarbelisi käsuinterpretaatoreid (näiteks netsh ja WMIC) igaüks oma käsustiku settidega. Mitte ühtegi neist ei integreeritud *shell*iga.

2002. aastal lähenes Microsoft käsurea halduse arendusele uutmoodi, luues *shell*i nimega **Monad** (samuti tuntud kui Microsoft Shell või MSH). *Shell* ja selle ideed avaldati augustis 2002 valges raamatus pealkirjaga Monad Manifesto. Monad oli uus laiendatav *shell* värske disainiga, mis oli võimeline automatiseerima suure hulga administratiivseid ülesandeid. Microsoft esitles Monadit 2003. aasta septembris Los Angeleses Professional Development Conference'il. Suletud beetatestimine algas mõned kuud hiljem, mis ajapikku jõudis avaliku beetatestimiseni.

Microsoft avaldas esimese Monadi avaliku beeta 17. juunil 2005; teise beeta 11. septembril 2005 ja kolmanda beeta 10. jaanuaril 2006. Juba 25. aprillil 2006 teatas Microsoft ametlikult Monadi ümbernimetamisest Windows PowerShelliks ja asetas selle tähtsale kohale oma haldustehnoloogiate pakkumistes. Samaaegselt lasti välja ka PowerShelli esimene väljalaskekandidaat. Tähtis aspekt nii nimevahetuse kui ka väljalaskekandidaadi juures oli see, et nüüdsest oli see Windowsi komponent, mitte järjekordne *add-on* toode.

PowerShelli teise väljalaskekandidaadi esimene versioon lasti välja 26. septembril 2006 ning lõplik väljalase veebi toimus 14. novembril 2006 TechEd üritusel Barcelonas. Varasematele Windowsi versioonidele lasti PowerShell välja 30. jaanuaril 2007.

PowerShell v2.0 arendus algas Microsoftile tüüpiliselt enne seda, kui PowerShell v1.0 välja lasti. PowerShell v2.0 saadi valmis ja lasti välja 2009. aasta augustis, integreerides selle opsüsteemidesse Windows 7 ja Windows Server 2008 R2. PowerShelli versioonid Windows XP-le, Windows Server 2003-le, Windows Vistale ja Windows Server 2008-le lasti välja 2009. aasta oktoobris ning need on allalaadimiseks saadaval 32-bitistele ja 64-bitistele platvormidele.

Ülevaade
--------

Windows PowerShell on võimeline teostama nelja tüüpi käske:

* *cmdlets*, need on .NET programmid, mis disainiti PowerShelliga suhtlema
* PowerShelli skriptid (failid laiendiga .ps1)
* PowerShelli funktsioonid
* eraldiseisvad programmid (programmid laiendiga .exe)

Kui käsk on eraldiseisev programm, siis PowerShell.exe käivitab selle eraldi protsessis; kui see on *cmdlet*, siis see käivitatakse PowerShelli protsessis. PowerShell pakub interaktiivset käsurea liidest, millesse saab sisestada käske ja kus kuvatakse nende väljund. Kasutajaliides, mis baseerub Win32 konsoolil, võimaldab käsu automaatset lõpunitrükkimist TAB klahvi abil, kuid ei võimalda süntaksi markeeringut. PowerShell võimaldab luua *cmdlet*'idele aliase loomist, mida PowerShell ise tõlgib originaalkäskude väljakutseteks. PowerShell toetab nii nimelisi kui ka parameetrilisi käske. *cmdlet*'i täites seob argumendi väärtuse parameetriga PowerShell, aga välistes eraldiseisvates rakendustes teeb seda rakendus ise ja PowerShell ei sekku.

PowerShell kasutab toru kontseptsiooni. Nagu ka Unixi toru puhul, kasutatakse PowerShelli torusid, et koostada kompleksseid käske, lubades ühe käsu väljundit sisestada teise käsu sisendina kasutades | operaatorit. Aga erinevalt Unixi vastest on PowerShelli torus objektid. Andmed, mida vahetatakse käskude vahel on täielikult väljatrükitavad objektid, mitte sümbolitevood. Kui andmed viiakse torru objektidena, siis elemendid, mida kapseldatakse, säilitavad oma struktuuri ja tüübid *cmdlets*'iüleselt, vajaduseta voolu töödelda, mis on vajalik sümbolitevoo puhul. Objekti saab kapseldada ka kindlaid funktsioone, mis töötavad kindlate andmete puhul. Viimase *cmdlet*ina torus on automaatselt PowerShelli poolt torru lükatud `Out-Default` *cmdlet*, mis muudab objekti formaadiobjektide vooks, mida saab ekraanile kuvada.

Kuna kõik PowerShelli objektid on .NET objektid, siis nad jagavad `.ToString()` meetodit, mis otsib välja objektis olevad andmed tekstiesitlusena. Windows PowerShell kasutab seda meetodit, et konverteerida objekt tekstiks. Lisaks lubab see ette määrata vormindamise seadeid, et objektide esitlemine tekstina kohandatakse vastavalt sellele, milliseid andmeelemente ja kuidas soovitakse kuvada. Kui välist rakendust kasutatakse torus, siis otsib see välja objektis oleva tekstivoo, mitte ei integreeri otse PowerShelli tüübi süsteemiga. Seda kasutatakse seetõttu, et säilitada tagasiühilduvus.

### *Cmdlets*

*Cmdlets*'id on spetsiaalsed käsud PowerShelli keskkonnas, mis rakendavad spetsiifilisi funktsioone. Need on põlised käsud PowerShelli *stack*is. Cmdlets järgib <tegusõna>-<nimisõna> nimemustrit, nagu näiteks *Get-ChildItem*. See aitab teha nad iseennast kirjeldavaks. *Cmdlets'*id väljastavad oma tulemusi objektidena või nende kollektsioonidena. Nad saavad valikuliselt võtta vastu sisendit selles vormis, mis teeb nad sobivaks vastuvõtjaks torus. Samal ajal kui PowerShell võimaldab jadasid ja teisi objektide kollektsioone kirjutada torru, töötlevad *cmdlets*-id alati objekte individuaalselt. Objektide kollektsioonide jaoks kutsub PowerShell välja iga kollektsioonis oleva objekti *cmdlets*-id järjekorras.

### Toru

PowerShell kasutab toru kontseptsiooni, mis võimaldab ühe *cmdlets*-i väljundit kasutada teise *cmdlets*-i sisendina. Näiteks, Get-Process *cmdlets*'i väljundit saab kasutada Sort-Object *cmdlets*'i sisendina, seejärel saab Where-Object filtreerida kõiki protsesse, millel on vähem kui 1 MB *paged* mälu ja lõpuks Select-Object *cmdlets* valib kümme esimest. PowerShelli toru erineb Unixi analoogist selle poolest, et torus söödetakse läbi etappide struktureeritud .NET objektid, mitte tüüpiliselt ebastruktuurne tekst. Objektide kasutamine eemaldab vajaduse sõeluda teksti väljundit, et ammutada andmeid.

### Skriptimine

Windows PowerShell sisaldab dünaamiliselt trükitavat skriptimiskeelt, mis saab implementeerida keerulisi operatsioone kasutades *cmdlets*'e imperatiivselt. Skriptimiskeel toetab muutujaid, funktsioone, hargnevust (*if-then-else*), tsükleid (*while, do, for, foreach*) ja erindite töötlemist. Samuti toetab see lõimumist .NET-iga. Muutujatel on PowerShelli skriptides nimi, mis algab dollarimärgiga($), neile saab määrata ükskõik mis väärtusi, kaasaarvatud *cmdlets*'ide väljundeid. Sõnesid saab lõpetada kas ühekordsete jutumärkidega või siis topeltjutumärkidega. Vastavalt muutuja süntaksile, kui tee faili on loogeliste sulgude vahel ja selle ees on dollarimärk (nagu siin: ${C.\foo.txt}), siis see viitab faili sisule.

Versioonid
----------

Kasutades algselt koodnime "Monad", näidati PowerShelli avalikkuse ees Professional Developers Conference'il 2003. aasta septembris. Microsoft on välja lasknud kokku neli PowerShelli versiooni ning neid kõiki endiselt toetatakse.

### Versioon 1.0

Versioon 1.0 lasti välja 2006. aastal opsüsteemidele Windows XP SP2/SP3, Windows Server 2003 ja Windows Vista. Windows Server 2008 jaoks on see valikuline.

### Versioon 2.0

Versioon 2.0 integreeriti opsüsteemidesse Windows 7 ja Windows Server 2008 R2 ning anti välja opsüsteemidele Windows XP SP3, Windows Server 2003 SP2 ja Windows Vistale SP1.PowerShell V2 tõi muudatusi skriptimiskeelde ja API hostimisse. Samuti tuli 240 uut *cmdlets'*i.

Mõned märkimisväärsemad uuendused versioonis 2.0:

* **PowerShelli kaugjuhtimine** – kasutades WS-Managementi võimaldab PowerShell 2.0 skripte ja *cmdlets*-e kasutade kaugjuhitaval masinal võis siis lausa suurtel gruppidel kaugjuhitavatel masinatel.
* **Taustatööd** – kutsutakse ka PSJobiks. See võimaldab skripti või toru kasutada asünkroonselt. Töid saab jooksutada kohalikul masinal või mitmetel kaugjuhitavatel masinatel.
* '*Ülekanded **– lubab*** **cmdlets**idel ja arendajatel sooritada ülekandeoperatsioone. PowerShell 2.0 sisaldab ülekande *cmdlets*-e *PSTransaction*i alustamiseks, sooritamiseks ja tagasikerimiseks.
* **Skripti Cmdlets'id** – need on *cmdlets*-id, mis on loodud kasutades PowerShell skriptimiskeelt. TÄHELEPANEK: soovitatav nimi skript *cmdlets*'idele on nüüd Advanced Functions.
* **Toru sammud** – See lubab kasutajal juhtida, millal on välja kutsutud *cmdlets*-ide funktsioonid `BeginProcessing()`, `ProcessRecord()` ja `EndProcessing()`.
* **Moodulid** – See lubab skriptide arendajatel ja administraatoritel organiseerida ja jaotada PowerShelli skripte iseseisvateks, taaskasutatavateks üksusteks. Moodulis olev kood käivitub omaette kontekstis ega ei mõjuta väljaspool moodulit olevat seisundit.

### Versioon 3.0

Versioon 3.0 on integreeritud Windows 8-sse ja Windows Server 2012-sse. Microsoft on teinud PowerShell 3-e kättesaadavaks Windows 7 SP1-le, Windows Server 2008 Sp1-le ning Windows Server 2008 SP1-le.PowerShell 3.0 on osa suuremast pakist, Windows Management Framework 3.0-st (WMF3), mis sisaldab ka WinRM teenust, et toetada kaugjuhtimist.

Mõned märkimisväärsemad uuendused versioonis 3.0:

* **Ajakavakohased tööd** – Tööd PowerShell 3.0-is saab plaaniliselt teostada eelmääratud kuupäeval ja kellaajal.
* **Seansi ühenduvus** – Seansse PowerShell 3.0-is saab lahti ühendada ja taasühendada. Lisaks on nüüd kaugjuhitavad seansid parema taluvusega ühendusvigade suhtes.
* **Täiustatud koodi kirjutamine** – PowerShell 3.0 toetab koodi automaatlõpetamist (IntelliSense) ja väljavõtet. PowerShell ISE lubab kasutajatel kasutada dialoogiaknaid, et määrata parameetreid PowerShelli *cmdlets*'idele.
* **Delegatsiooni tugi** – Nagu ka Active Directory, lubab PowerShell 3.0 individuaal-administratiivülesandeid delegeerida kasutajatele, kel pole ligipääsu säärast tüüpi ülesannetele ilma permanentse ligipääsuloa andmiseta.
* **Spikri uuendus** – Spikri dokumentatsiooni saab nüüd uuendada Update\_Help käsuga.

### Versioon 4.0

Versioon 4.0 on integreeritud opsüsteemidesse Windows 8.1 ja Windows Server 2012 R2. Microsoft on teinud PowerShell 4 kättesaadavaks ka opsüsteemidele Windows 7 SP1, Windows Server 2008 R2 SP1 ja Windows Server 2012.

Mõned märkimisväärsemad uuendused versioonis 4.0:

* **Soovitud seisundi konfigureerimine** – deklaratiivse keele laiendused ja tööriistad, mis võimaldavad juhtida DMTF juhtimisstandarditele ja [WS-Management] protokollile vastavate süsteemide konfiguratsiooniandmeid.
* **Uus vaiketäitepoliis** – Windowsi Serveritel on nüüd vaiketäitepoliisiks RemoteSigned.
* **Spikri salvestamine** – spikrit saab nüüd salvestada moodulitele, mis on installeeritud kaugjuhitavatele arvutitele.
* **Täiustatud silumine** – *Debugger* toetab nüüd silumise *workflow*e, kaugjuhitavate skriptide täitmist ja silumisseanssiside säilitamist üle kogu PowerShelli seansi.
* **-PipelineVariable** – uus üldlevinud parameeter, et võimaldada kasutada praegust toruobjekti muutujana programmeerimiseesmärkidel.

Faililaiendused
---------------

* PS1 – Windows PowerSHell shell skript
* PSD1 – Windows PowerShell andmefail (kasutusel versioon kahes)
* PSM1 – Windows PowerShell moodulfail (kasutusel versioon kahes)
* PS1XML – Windows PowerShell vormingu ja tüübi definitsioonid
* CLIXML – Windows PowerShell andmejada
* PSC1 – Windows PowerShell konsoolifail
* PSSC – Windows PowerShell seansikonfiguratsioonifail

Rakenduste toetus
-----------------

| Rakendus | Versioon | Cmdlets | Varustaja | Juhtimis-GUI |
| --- | --- | --- | --- | --- |
| Exchange Server | 2007 | 402 | Jah | Jah |
| Windows Server | 2008 | Jah | Jah | Ei |
| Microsoft SQL Server | 2008 | Jah | Jah | Ei |
| Microsoft SharePoint | 2010 | Jah | Jah | Ei |
| System Center Operations Manager | 2007 | 74 | Jah | Ei |
| System Center Virtual Machine Manager | 2007 | Jah | Jah | Jah |
| System Center Data Protection Manager | 2007 | Jah | Ei | Ei |
| Windows Compute Cluster Server | 2007 | Jah | Jah | Ei |
| Lotus Domino | 08.02.0012 | 47 | Ei | Ei |
| Open XML | 1.0 | 33 | Ei | Ei |
| IBM WebSphere MQ | 6.0.2.2 | 44 | Ei | Ei |
| Quest Management Shell for Active Directory | 1.1 | 40 | Ei | Ei |
| Special Operations Software Specops Command | 1.0 | Jah | Ei | Jah |
| VMware vSphere PowerCLI | 5.1 R2 | 370 | Ei | Jah |
| Internet Information Services | 7.0 | 54 | Jah | Ei |
| Windows 7 Troubleshooting Center | 6.1 | Jah | Ei | Jah |
| Microsoft Deployment Toolkit | 2010 | Jah | Jah | Jah |
| NetApp Data ONTAP PowerShell Toolkit | 2.1 | 1158 | Jah | Jah |
| JAMS Scheduler – Job Access & Management System | 5.0 | 52 | Jah | Jah |
| UIAutomation | 0.8 | 432 | Ei | Ei |
| Dell Equallogic | 3.5 | 55 | Ei | Ei |
| LOGINventory | 5.8 | Jah | Jah | Jah |
| SePSX | 0.4.1 | 39 | Ei | Ei |
|

Viited
------

1. 1 2  "How Windows PowerShell works". MSDN. Vaadatud 27.11.2007.
2. ↑  "Extend Windows PowerShell With Custom Commands". MSDN. Vaadatud 27.11.2007.
3. ↑  Scott Lowe (5. jaanuar 2007). "Exchange 2007: Get used to the command line". TechRepublic. Originaali arhiivikoopia seisuga 1.07.2012. Vaadatud 28.11.2007.
4. ↑  "SQL Server Support for PowerShell!". Vaadatud 28.11.2007.
5. ↑  Dragan, Richard V. (23. aprill 2003). "Windows Server 2003 Delivers Improvements All Around". PC Magazine. Originaali arhiivikoopia seisuga 12.01.2008. Vaadatud 2.11.2007. A standout feature here is that virtually all admin utilities now work from the command line (and most are available through telnet).
6. ↑  Snover, Jeffrey (2. august 2002). "Monad Manifesto". *Windows PowerShell Team*. Microsoft. Vaadatud 9.08.2002.
7. ↑  Snover, Jeffrey (25. aprill 2006). "Windows PowerShell (Monad) Has Arrived". *Windows PowerShell team blog*. MSDN. Vaadatud 26.04.2006.
8. ↑  Snover, Jeffrey (15. november 2006). "Windows PowerShell : Windows PowerShell & Windows Vista". *Windows PowerShell team blog*. MSDN. Vaadatud 26.01.2007.
9. ↑  "Windows PowerShell v2.0 RTM download for Downlevel OSs".
10. ↑  about\_Command\_Precedence
11. ↑  Don Jones (2008). "Windows PowerShell – Rethinking the Pipeline". Microsoft TechNet. Vaadatud 28.11.2007.
12. ↑  "Windows PowerShell Object Concepts". Vaadatud 28.11.2007.
13. ↑  "How PowerShell Formatting and Outputting REALLY works". Vaadatud 28.11.2007.
14. ↑  "More – How does PowerShell formatting really work?". Vaadatud 28.11.2007.
15. ↑  about\_Pipelines
16. ↑  about\_Objects
17. 1 2  about\_Format.ps1xml
18. 1 2  "Windows PowerShell Cmdlets". Vaadatud 28.11.2007.
19. ↑  "Windows PowerShell Owner's Manual: Piping and the Pipeline in Windows PowerShell". Technet.microsoft.com. Vaadatud 27.09.2011.
20. ↑  "Download Windows PowerShell". 30. detsember 2008. Vaadatud 27.06.2010.
21. ↑  "Windows Management Framework is here!". 27. oktoober 2009. Vaadatud 30.10.2009.
22. ↑  PowerShell Team (29. oktoober 2008). "574 Reasons Why We Are So Proud and Optimistic About W7 and WS08R2 – Windows PowerShell Blog – Site Home – MSDN Blogs". Blogs.msdn.com. Vaadatud 27.09.2011.
23. ↑  "Arhiivikoopia". Originaali arhiivikoopia seisuga 13. oktoober 2008. Vaadatud 8. detsembril 2013.`{{netiviide}}`: CS1 hooldus: arhiivikoopia kasutusel pealkirjana (link)
24. ↑  "What's New in CTP of PowerShell 2.0". Vaadatud 28.11.2007.
25. ↑  "Windows PowerShell V2 Community Technology Preview 2 (CTP2) – releaseNotes". Originaali arhiivikoopia seisuga 6.05.2008. Vaadatud 5.05.2008.
26. ↑  "Differences between PowerShell 1.0 and PowerShell 2.0". Originaali arhiivikoopia seisuga 17.09.2010. Vaadatud 26.06.2010.
27. ↑  "Powershell Version 3 is RTM!". 13. august 2012. Vaadatud 13.08.2012.
28. 1 2 3  "Windows Management Framework 3.0". *Download Center*. Microsoft. 4. september 2012. Vaadatud 8.11.2012.
29. ↑  Honeycutt, Jerry (2012). Woolley, Valerie (toim). *Free ebook: Introducing Windows 8: An Overview for IT Professionals*. Redmond, WA: Microsoft Press. ISBN 978-0-7356-7050-1. Vaadatud 8.11.2012.
30. ↑  "Windows Management Framework 4.0 is now available". Microsoft. 24. oktoober 2013. Vaadatud 4. novembril 2013.
31. ↑  Levy, Shay (25. juuni 2013). "New Features in Windows PowerShell 4.0". *powershellmagazine.com*. PowerShell Magazine. Vaadatud 26. juunil 2013.
32. ↑  "Desired State Configuration in Windows Server 2012 R2 PowerShell". *Channel9*. Microsoft. 3. juuni 2013. Originaali arhiivikoopia seisuga 26. detsember 2013. Vaadatud 26. juunil 2013.
33. ↑  Hall, Adrian (7. juuni 2013). "Thoughts from Microsoft TechEd North America". *Blogs: Tips & Tricks*. Splunk. Vaadatud 26. juunil 2013.
34. ↑  about\_Script
35. ↑  Import-LocalizedData
36. ↑  about\_Modules
37. ↑  about\_types.ps1xml
38. ↑  Export-CliXML
39. ↑  Export-Console Cmdlet
40. ↑  about\_Session\_Configuration\_Files