Historically, command-line utilities in Unix systems have been better developed than in Windows, but the situation has changed with the emergence of new solutions.
Windows PowerShell allows system administrators to automate most routine tasks. It can change settings, stop and start services, as well as maintain most installed applications. To perceive the blue window as just another command interpreter would be incorrect. This approach does not reflect the essence of the innovations offered by Microsoft. In reality, Windows PowerShell's capabilities are much broader: in a series of articles, we will try to understand how Microsoft's solution differs from the more familiar tools.
Main Features
Certainly, Windows PowerShell is primarily a command shell with a scripting language, originally built on the .NET Framework platform, and later on .NET Core. Unlike shells that accept and return text data, Windows PowerShell works with .NET classes that have properties and methods. PowerShell allows you to run standard commands and also provides access to COM, WMI, and ADSI objects. It uses various stores, such as the file system or the Windows registry, for which so-called providers have been created. It is worth noting the ability to embed executable PowerShell components into other applications to perform various operations, including through a graphical interface. The opposite is also true: many Windows applications provide access to their management interfaces through PowerShell.
Windows PowerShell allows:
- Change operating system settings;
- Manage services and processes;
- Configure server roles and components;
- Install software;
- Manage installed software through specialized interfaces;
- Embed executables into third-party programs;
- Create scripts to automate administrative tasks;
- Work with the file system, Windows registry, certificate store, etc.
Shell and development environment
Windows PowerShell ima dve verzije: pored emulira konzole sa komandnom linijom postoji i integrisano okruženje za skripting (Integrated Scripting Environment — ISE). Da biste pristupili komandnom interfejsu, dovoljno je izabrati odgovarajući prečicu u Windows meniju ili pokrenuti powershell.exe iz menija „Pokreni“. Na ekranu će se pojaviti plavi prozor, koji se značajno razlikuje mogućnostima od zastarelog cmd.exe. Tu su automatsko dopunjavanje i druge funkcije uobičajene korisnicima komandnih linija Unix sistema.

Za rad sa komandnom linijom potrebno je zapamtiti neka kombinacije tastera:
- Tasteri sa strelicama gore i dolje pomeraju istoriju za ponavljanje prethodno unetih komandi;
- Desna strelica na kraju reda ponovo unosi prethodnu komandu znak po znak;
- Ctrl+Home briše uneti tekst od pozicije kursora do početka reda;
- Ctrl+End briše tekst od kursora do kraja reda.
F7 prikazuje prozor sa unetim komandama i omogućava izbor jedne od njih. U konzoli takođe funkcioniše označavanje teksta mišem, kopiranje i lepljenje, pozicioniranje kursora, brisanje, backspace — sve onako kako volimo.

Windows PowerShell ISE je potpuno razvojno okruženje sa editorom koda koji podržava tabove i sintaksnu isticanje, konstruktorom komandi, ugrađenim debagerom i drugim programerskim užicima. Ako u editoru razvojne sredine nakon imena komande napišete znak minus, dobićete u padajućem meniju sve dostupne opcije sa naznakom tipa. Pokretanje PowerShell ISE može se obaviti ili putem prečice iz sistemskog menija, ili koristeći izvršnu datoteku powershell_ise.exe.

Cmdlets
U Windows PowerShell-u su se pojavili takozvani cmdlets. To su specijalizovane .NET klase, u koje je ugrađena raznolika funkcionalnost. Imenovani su prema principu „Akcija-Objekat“ (ili „Glagol-imenica“, ako vam tako više odgovara), a povezana oznaka podseća na predikate i subjekte u rečenicama prirodnih jezika. Na primer, Get-Help doslovno znači „Dobiti-Pomoć“ ili u kontekstu PowerShell-a: „Prikazati-Pomoć“. U suštini to je ekvivalent komande man u Unix sistemima i priručnici u PowerShell-u treba tražiti upravo na taj način, a ne pozivajući cmdlets sa ključem —help ili /?. Ne zaboravite ni na onlajn dokumentaciju za PowerShell: Microsoft-ova je dovoljno detaljna.
Poleg Get se v cmdletih za označevanje dejanj uporabljajo tudi drugi glagoli (in ne le glagoli, strogo gledano). V spodnjem seznamu bomo navedli nekaj primerov:
Dodaj — dodati;
Počisti — očistiti;
Omogoči — vključiti;
Onemogoči — izklopiti;
Nov — ustvariti;
Odstrani — izbrisati;
Nastavi — nastaviti;
Začni — zagnati;
Ustavi — ustaviti;
Izvoz — izvoziti;
Uvozi — uvoziti.
Obstajajo sistemski, uporabniški in opcijski cmdleti: kot rezultat izvajanja vsi vrnejo objekt ali niz objektov. Na črke niso občutljivi, torej z vidika interpreterja ukazov ni razlike med Get-Help in get-help. Za ločevanje se uporablja simbol ';', vendar ga je treba obvezno uporabiti le, če se v eni vrstici izvaja več cmdletov.
Cmdleti Windows PowerShell so razvrščeni v module (NetTCPIP, Hyper-V itd.), za iskanje po objektu in akciji pa obstaja cmdlet Get-Command. Pomoč o njem lahko prikažete na naslednji način:
Get-Help Get-Command 
Privzeto ukaz prikaže kratko pomoč, vendar se lahko cmdletom po potrebi predložijo parametri (argumenti). Z njihovo pomočjo lahko na primer dobite podrobno (parameter -Detailed) ali popolno (parameter -Full) pomoč, prav tako pa prikažete primere (parameter -Examples):
Get-Help Get-Command -ExamplesPomoč v Windows PowerShell se posodablja s cmdletom Update-Help. Če je vrstica ukazov predolga, lahko argumente cmdleta prenesete na naslednjo vrstico tako, da napišete nadomestni simbol '`' in pritisnete Enter — preprosto končati pisanje ukaza v eni vrstici in nadaljevati v drugi ne bo delovalo.
Spodaj navajamo nekaj primerov pogostih cmdletov:
Get-Process — prikaži trenutno zagnane procese v sistemu;
Get-Service — prikaži storitve in njihov status;
Get-Content — prikaži vsebino datoteke.
Za pogosto uporabljene cmdlete in zunanje pripomočke v Windows PowerShell obstajajo kratki sinonimi — aliasi (iz angleščine alias). Na primer, dir — alias Get-ChildItem. V seznamu sinonimov so tudi analogi ukazov iz Unix sistemov (ls, ps itd.), cmdlet Get-Help pa se pokliče z ukazom help. Celoten seznam sinonimov si lahko ogledate s cmdletom Get-Alias:

Skripti, funkcije, moduli in jezik PowerShell
Skripti Windows PowerShell se shranjujejo kot navadne besedilne datoteke s končnico .ps1. Ne morete jih zagnati z dvojnim klikom: morate z desnim gumbom miške priklicati kontekstni meni in izbrati »Zaženi v PowerShell«. Iz konzole boste morali ali navesti polno pot do skripta ali pa se premakniti v ustrezni imenik in napisati ime datoteke. Zagon skriptov je prav tako omejen s sistemsko politiko, za preverjanje trenutnih nastavitev pa lahko uporabite cmdlet Get-ExecutionPolicy, ki bo vrnil eno od naslednjih vrednosti:
Restricted — zagon skriptov je prepovedan (privzeto);
AllSigned — dovoljen je le zagon podpisanih skriptov, ki jih je zaupanja vredno razvil razvijalec;
RemoteSigned — dovoljen je zagon podpisanih in lastnih skriptov;
Unrestricted — dovoljen je zagon vseh skriptov.
Administrator ima dve možnosti delovanja. Najbolj varna možnost predvideva podpisovanje skriptov, vendar je to precej zapleten postopek — s tem se bomo podrobneje ukvarjali v naslednjih člankih. Zdaj bomo šli po poti najmanjšega upora in spremenili politiko:
Set-ExecutionPolicy RemoteSigned 
Za to je potrebno zagnati PowerShell z imeni administratorja, čeprav lahko s posebnim parametrom spremenite politiko tudi za trenutnega uporabnika.
Skripti so napisani v objektno usmerjenem programskem jeziku, katerih ukazi so poimenovani po istem principu kot prej obravnavani cmdleti: »Dejanje-Objekt« (»Glagol-Samsvoje«). Njegova glavna naloga je avtomatizacija nalog upravljanja, vendar je to popoln interpretirani jezik, ki vsebuje vse potrebne konstrukcije: pogojne prehode, zanke, spremenljivke, tabele, objekte, obdelavo napak itd. Za pisanje skriptov je primerna katera koli besedilni urejevalnik, vendar je najlažje zagnati Windows PowerShell ISE.
V skript lahko prenesete parametre, jih naredite obvezne ter določite privzete vrednosti. Poleg tega Windows PowerShell omogoča ustvarjanje funkcij in njihovo klicanje podobno kot cmdlete: za to se uporablja struktura Function in zavite oklepaje. Skript s funkcijami se imenuje modul in ima končnico .psm1. Moduli morajo biti shranjeni v imenikih, ki jih določajo okoljske spremenljivke PowerShell. Poglejte jih lahko s pomočjo naslednjega ukaza:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSizeKonvejorji
V zadnjem primeru smo uporabili znano strukturo za uporabnike Unix sistemov. V Windows PowerShell navpična črta prav tako omogoča prenos izhoda enega ukaza na vhod drugega, vendar obstajajo tudi pomembne razlike v izvajanju konvejerja: tu ne gre več za niz znakov ali nek tekst. Vgrajeni ukazi ali uporabniške funkcije vračajo objekte ali nize objektov, pa tudi lahko jih sprejemajo na vhodu. Tako kot v Bourne shell in njegovih številnih naslednikih, PowerShell poenostavi izvajanje zapletenih nalog s pomočjo konvejera.
Najenostavnejši primer konvejera izgleda tako:
Get-Service | Sort-Object -property Status 
Najprej se izvede ukaz Get-Service, nato pa se vse pridobljene storitve prenesejo na razvrščanje po lastnosti Status ukazu Sort-Object. V kateri točno argument se rezultat prejšnjega dela konvejera prenese, je odvisno od njegove vrste — običajno je to InputObject. Ta tema bo podrobneje obravnavana v članku o programskem jeziku PowerShell.
Če želite, lahko verigo nadaljujete in prenesete rezultat dela Sort-Object še enemu ukazu (izvajali se bodo od leve proti desni). Mimogrede, uporabnikom Windows je na voljo tudi znana konstrukcija za paginiranje:
Get-Service | Sort-Object -property Status | moreZagon nalog v ozadju
Pogosto je potrebno zagnati nek ukaz v ozadju, da ne bi čakali na rezultat njegovega izvajanja v seji lupine. V Windows PowerShell je na voljo več ukazov za to:
Start-Job — zagon ozadnje naloge;
Stop-Job — ustavitev ozadnje naloge;
Get-Job — pregled seznama ozadnjih nalog;
Receive-Job — pregled rezultata izvajanja ozadnje naloge;
Remove-Job — odstranitev ozadnje naloge;
Wait-Job — prenos ozadnje naloge nazaj v konzolo.
Za zagon ozadnje naloge uporabimo ukaz Start-Job in v zavitih oklepajih navedemo ukaz ali niz ukazov:
Start-Job {Get-Service} 
Z ozadnjimi nalogami v Windows PowerShell lahko upravljamo, če poznamo njihova imena. Najprej se jih naučimo prikazovati:
Get-Job 
Sedaj bomo prikazali rezultat dela naloge Job1:
Receive-Job Job1 | more 
Vse je precej preprosto.
Oddaljeno izvajanje ukazov
Windows PowerShell omogoča izvajanje ukazov in skript ne le na lokalnem, ampak tudi na oddaljenem računalniku ter celo na skupini računalnikov. Za to obstaja več načinov:
- Številni cmdleti imajo parameter
-ComputerName, toda na ta način ni mogoče npr. ustvariti cevi; - Cmdlet
Enter-PSSessionomogoča ustvarjanje interaktivne seje na oddaljenem računalniku; - S cmdletom
Invoke-Commandlahko izvajate ukaze ali skripte na enem ali več oddaljenih računalnikih.
Različice PowerShell
Od prve izdaje leta 2006 se je PowerShell resno spremenil. Orodje je dostopno za številne sisteme, ki delujejo na različnih strojnih platformah (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 in OS X. Zadnja izdaja 6.2 je bila izdana 10. januarja 2018. Skripte, napisanih za starejše različice, z veliko verjetnostjo bodo delovale v novejših, medtem ko lahko nastanejo težave z obratnim prenosom, saj je v PowerShell v letih razvoja prišlo do velikega števila novih cmdletov. Različico ukazne lupine, nameščene na računalniku, lahko ugotovite s pomočjo lastnosti PSVersion v vgrajeni spremenljivki $PSVersionTable:
$PSVersionTable.PSVersion 
Lahko se tudi poslužite cmdleta:
Get-Variable -Name PSVersionTable –ValueOnly 
Enako lahko storite tudi s cmdletom Get-Host. V resnici je možnosti mnogo, a za njihovo uporabo je treba raziskati programski jezik PowerShell, s čimer se bomo ukvarjali v .
Zaključki
Korporaciji Microsoft je uspelo ustvariti resnično močno ukazno lupino z priročnim integriranim okoljem za razvoj skript. Od običajnih orodij, ki jih poznamo iz sveta Unix, jo odlikuje globoka integracija z operacijskimi sistemi družine Windows ter z programsko opremo zanje in platformo .NET Core. PowerShell lahko imenujemo objektno usmerjena lupina, ker cmdleti in uporabniške funkcije vračajo objekte ali nize objektov ter jih lahko prejemajo kot vhod. Menimo, da bi morali ta pripomoček obvladati vsi skrbniki strežnikov na Windows: minilo je čas, ko so se lahko izognili ukazni vrstici. Napredna konzolna lupina je še posebej potrebna na , ampak to je že povsem druga zgodba.
Samo registrovani korisnici mogu učestvovati u anketi. , molim vas.
Kakšne teme bi morali najprej obravnavati v naslednjih člankih serije?
53,2%Programiranje v PowerShell123
42,4%Funkcije in moduli PowerShell98
22,1%Kako podpisati svoje skripte?51
12,1%Delo s shrambami prek ponudnikov (providers)28
57,6%Avtomatizacija upravljanja računalnikov z uporabo PowerShell133
30,7%Upravljanje programske opreme in vgradnja izvršljivih komponent PowerShell v zunanje izdelke71
Glasovalo je 231 uporabnikov. 37 uporabnikov se je vzdržalo.
Izvor: habr.com
