Historicky sú príkazové nástroje v systémoch Unix lepšie vyvinuté ako vo Windows, avšak s príchodom nového riešenia sa situácia zmenila.
Windows PowerShell umožňuje systémovým administrátorom automatizovať väčšinu rutinných úloh. Umožňuje meniť nastavenia, zastavovať a spúštať služby, ako aj spravovať väčšinu nainštalovaných aplikácií. Považovať modré okno za ďalší interpret príkazov by bolo nesprávne. Tento prístup neodráža podstatu inovácií ponúkaných spoločnosťou Microsoft. V skutočnosti sú možnosti Windows PowerShell oveľa širšie: v súbore článkov sa pokúsime objasniť, čím sa riešenie Microsoftu líši od nám známejších nástrojov.
Základné funkcie
Samozrejme, Windows PowerShell je predovšetkým príkazový riadok so skriptovacím jazykom, ktorý bol pôvodne vytvorený na základe platformy .NET Framework a neskôr – na .NET Core. Na rozdiel od shellov, ktoré prijímajú a vracajú textové údaje, Windows PowerShell pracuje s .NET triedami, ktoré majú vlastnosti a metódy. PowerShell umožňuje vykonávať bežné príkazy, ako aj poskytuje prístup k objektom COM, WMI a ADSI. Používa sa v rôznych úložiskách, ako je súborový systém alebo registry Windows, pričom pre prístup k nim sú vytvorení tzv. dodávatelia. Všimnite si možnosť integrácie vykonateľných komponentov PowerShell do iných aplikácií na vykonanie rôznych operácií, vrátane prostredníctvom grafického rozhrania. Platí aj naopak: mnohé aplikácie pre Windows poskytujú prístup k svojim riadiacim rozhraniam prostredníctvom PowerShell.
Windows PowerShell umožňuje:
- Meniť nastavenia operačného systému;
- Spravovať služby a procesy;
- Nastavovať úlohy a komponenty servera;
- Inštalovať softvér;
- Spravovať nainštalovaný softvér prostredníctvom špeciálnych rozhraní;
- Integrácia vykonateľných komponentov do iných aplikácií;
- Vytvárať skripty na automatizáciu administratívnych úloh;
- Pracovať so súborovým systémom, registrami Windows, úložiskom certifikátov atď.
Riadok a vývojové prostredie
Windows PowerShell existuje ve dvou formách: kromě emulátoru konzole s příkazovou řadou je zde integrované skriptovací prostředí (Integrated Scripting Environment — ISE). Pro přístup k příkazovému rozhraní stačí vybrat odpovídající zkratku v nabídce Windows nebo spustit powershell.exe z nabídky „Spustit“. Na obrazovce se objeví modré okno, které se výrazně liší svými možnostmi od zastaralého cmd.exe. Nabízí automatické dokončování a další funkce obvyklé pro uživatele příkazových prostředí Unixových systémů.

Pro práci s prostředím je třeba si zapamatovat některé klávesové zkratky:
- Šipky nahoru a dolů procházejí historií pro opakování dříve zadaných příkazů;
- Šipka vpravo na konci řádku přepisuje předchozí příkaz po znacích;
- Ctrl+Home odstraní zadaný text od pozice kurzoru až do začátku řádku;
- Ctrl+End odstraní text od kurzoru až do konce řádku.
F7 zobrazuje okno se zadanými příkazy a umožňuje vybrat jeden z nich. V konzoli rovněž funguje výběr textu myší, kopírování a vložení, umístění kurzoru, mazání, backspace – vše tak, jak to máme rádi.

Windows PowerShell ISE je plnohodnotné vývojové prostředí s editorem kódu, který podporuje karty a zvýraznění syntaxe, konstruování příkazů, vestavěný debugger a další programátorské radosti. Pokud v editoru vývojového prostředí napíšete za názvem příkazu pomlčku, vyskakující seznam zobrazí všechny dostupné parametry s uvedením typu. PowerShell ISE lze spustit buď prostřednictvím zkratky v systémovém menu, nebo pomocí spustitelného souboru powershell_ise.exe.

Cmdlety
Ve Windows PowerShell se objevily tzv. cmdlety (cmdlets). To jsou specializované třídy .NET, které obsahují různou funkcionalitu. Jsou pojmenovány podle principu „Akce-Objekt“ (nebo „Sloveso-Podstatné jméno“, pokud vám to vyhovuje více), a spojení oddělené pomlčkou připomíná predikát a subjekt ve větách přirozených jazyků. Například Get-Help doslovně znamená „Získat-Pomoc“, nebo v kontextu PowerShellu: „Zobrazit-Pomoc“. V podstatě se jedná o analog příkazu man v Unixových systémech a manuály v PowerShellu je třeba dotazovat tímto způsobem, a ne vyvolávat cmdlety s klíčem —help nebo \/? Nezapomeňte také na online dokumentaci k PowerShellu: u Microsoftu je dost podrobná.
Okrem príkazu Get sa v cmdletoch používajú aj iné slovesá (a nielen slovesá, prísne vzaté). Nižšie uvádzame niekoľko príkladov:
Pridať — pridať;
Vymazať — vyčistiť;
Povoliť — povoliť;
Zakázať — zakázať;
Nový — vytvoriť;
Odstrániť — odstrániť;
Nastaviť — nastaviť;
Spustiť — spustiť;
Zastaviť — zastaviť;
Exportovať — exportovať;
Importovať — importovať.
Existujú systémové, používateľské a voliteľné cmdlety: výsledkom vykonania sa vždy vracia objekt alebo pole objektov. Na veľkosť písmen nie sú citlivé, t.j. z pohľadu interpreta príkazov nie je medzi Get-Help a get-help žiaden rozdiel. Na rozdelenie sa používa symbol ';', ale ten je potrebné uviesť iba v prípade, že sa na jednom riadku vykonáva niekoľko cmdletov.
Cmdlety Windows PowerShell sú usporiadané do modulov (NetTCPIP, Hyper-V a pod.), a na vyhľadávanie podľa objektu a akcie existuje cmdlet Get-Command. Pomoc k nemu môžete zobraziť takto:
Get-Help Get-Command 
Podľa predvoleného nastavenia príkaz zobrazuje stručnú pomoc, ale do cmdletov sa v prípade potreby prenášajú parametre (argumenty). S ich pomocou môžete napríklad získať podrobné (parameter -Detailed) alebo úplné (parameter -Full) informácie a taktiež zobraziť príklady (parameter -Examples):
Get-Help Get-Command -ExamplesPomoc v systéme Windows PowerShell sa aktualizuje cmdletom Update-Help. Ak je príkaz príliš dlhý, argumenty cmdletu môžete preniesť na nasledujúci riadok tak, že napíšete znakom '`, a stlačíte Enter — jednoducho ukončiť príkaz na jednom riadku a pokračovať na druhom nebude fungovať.
Nižšie uvádzame niekoľko príkladov bežne používaných cmdletov:
Get-Process — zobraziť procesy bežiace v systéme;
Get-Service — zobraziť služby a ich stav;
Get-Content — zobraziť obsah súboru.
Pre často používané cmdlety a externé utilitky existujú v systéme Windows PowerShell krátke synonymá — aliasy (z anglického Alias). Napríklad, dir — alias Get-ChildItem. V zozname sú synonymá aj ekvivalenty príkazov z Unix systémov (ls, ps a pod.), a cmdlet Get-Help sa volá príkazom help. Úplný zoznam synonym môžete zobraziť pomocou cmdletu Get-Alias:

Skripty, funkcie, moduly a jazyk PowerShell
Skripty Windows PowerShell sa ukladajú ako obyčajné textové súbory s príponou .ps1. Neda sa ich spustiť dvojitým kliknutím: je potrebné pravým tlačidlom myši vyvolať kontextové menu a zvoliť položku „Spustiť v PowerShell“. Z konzoly je potrebné buď uviesť úplnú cestu k skriptu, alebo prejsť do príslušného adresára a zadať názov súboru. Spúšťanie skriptov je tiež obmedzené systémovou politikou a na kontrolu aktuálnych nastavení môžete použiť príkaz Get-ExecutionPolicy, ktorý vráti jednu z nasledujúcich hodnôt:
Restricted — spúšťanie skriptu je zakázané (predvolené);
AllSigned — povolené je len spúšťanie podpísaných skriptov dôveryhodným vývojárom;
RemoteSigned — povolené je spúšťanie podpísaných a vlastných skriptov;
Unrestricted — povolené je spúšťanie akýchkoľvek skriptov.
Správca má dve možnosti. Najbezpečnejšia alternatíva predpokladá podpisovanie skriptov, ale to je dosť zložitá úloha — s tým sa budeme zaoberať v nasledujúcich článkoch. Teraz pôjdeme cestou najmenšieho odporu a zmeníme politiku:
Set-ExecutionPolicy RemoteSigned 
PowerShell na to bude potrebné spustiť s oprávneniami správcu, aj keď pomocou špeciálneho parametra je možné zmeniť politiku aj pre aktuálneho používateľa.
Skripty sú napísané v objektovo-orientovanom programovacom jazyku, pričom príkazy sa nazývajú podľa toho istého princípu, ako vyššie uvedené príkazy: „Akcia-Objekt“ („Sloveso-Podstatné meno“). Jeho hlavným účelom je automatizácia administratívnych úloh, ale ide o plnohodnotný interpretovaný jazyk, v ktorom sú všetky potrebné konštrukcie: podmienkový prístup, cykly, premenné, polia, objekty, spracovanie chýb a podobne. Na písanie skriptov je vhodný akýkoľvek textový editor, ale najpohodlnejšie je spustiť Windows PowerShell ISE.
Do skriptu môžete odovzdávať parametre, robiť ich povinnými, a tiež nastavovať predvolené hodnoty. Okrem toho Windows PowerShell umožňuje vytvárať funkcie a volať ich presne tak, ako príkazy: na to sa používa konštrukcia Function a zložené zátvorky. Skript s funkciami sa nazýva modul a má príponu .psm1. Moduly by sa mali ukladať do adresárov definovaných v prostrediach PowerShell. Pozrieť si ich môžete pomocou nasledujúceho príkazu:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSizeKonvekčné pásy
V poslednom príklade sme použili známu štruktúru pre používateľov shellov Unixových systémov. V PowerShell Windowsu tiež vertikálna čiara umožňuje preniesť výstup jedného príkazu na vstup iného, ale v implementácii konvejra existujú aj podstatné rozdiely: ide tu o objekty alebo pole objektov, a tiež môžu prijímať na vstupe. Tak ako v Bourne shelle a jeho mnohých nástupcoch, aj v PowerShelle sa pomocou konvejra zjednodušuje vykonávanie zložitých úloh.
Najjednoduchší príklad konvejra vyzerá takto:
Get-Service | Sort-Object -property Status 
Najprv sa vykoná príkaz Get-Service a potom sa všetky získané služby prenesú na triedenie podľa vlastnosti Status príkazu Sort-Object. Do ktorého presne argumentu sa predáva výsledok predchádzajúceho úseku konvejra, závisí od jeho typu — zvyčajne je to InputObject. Podrobnejšie sa táto otázka bude preberať v článku venovanom programovaciemu jazyku PowerShell.
Ak si to želáte, môžete reťazec pokračovať a preniesť výsledok príkazu Sort-Object ďalšiemu príkazu (vykonávať sa budú zľava doprava). Mimochodom, používateľom Windows je k dispozícii aj známa stratégia pre po stránkový výstup:
Get-Service | Sort-Object -property Status | moreSpúšťanie úloh na pozadí
Celkom často potrebujete spustiť nejaký príkaz na pozadí, aby ste nečakali na výsledok jeho vykonania v relácii shellu. V PowerShell Windowsu existuje niekoľko príkazov pre takéto prípady:
Start-Job — spustenie úlohy na pozadí;
Stop-Job — zastavenie úlohy na pozadí;
Get-Job — zobrazenie zoznamu úloh na pozadí;
Receive-Job — zobrazenie výsledku vykonania úlohy na pozadí;
Remove-Job — odstránenie úlohy na pozadí;
Wait-Job — prenesenie úlohy na pozadí späť do konzoly.
Pre spustenie úlohy na pozadí použijeme príkaz Start-Job a v zložených zátvorkách uvedieme príkaz alebo množinu príkazov:
Start-Job {Get-Service} 
S úlohami na pozadí v PowerShell Windowsu môžeme manipulovať, ak poznáme ich názvy. Najskôr sa naučme ich zobraziť:
Get-Job 
Teraz ukážeme výsledok vykonania úlohy Job1:
Receive-Job Job1 | more 
Všetko je celkom jednoduché.
Diaľkové vykonávanie príkazov
Windows PowerShell umožňuje vykonávať príkazy a skripty nielen na lokálnom, ale aj na vzdialenom počítači a dokonca na celej skupine strojov. Na to existuje niekoľko spôsobov:
- Mnohé príkazy majú parameter
-ComputerName, ale týmto spôsobom napríklad nie je možné vytvoriť potrubie; - Príkaz
Enter-PSSessionumožňuje vytvoriť interaktívnu reláciu na vzdialenom stroji; - Pomocou príkazu
Invoke-Commandje možné vykonávať príkazy alebo skripty na jednom alebo viacerých vzdialených počítačoch.
Verzie PowerShell
Od svojho prvého vydania v roku 2006 sa PowerShell výrazne zmenil. Nástroj je dostupný pre množstvo systémov bežiacich na rôznych hardvérových platformách (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 a OS X. Posledné vydanie 6.2 bolo sprístupnené 10. januára 2018. Skripty napísané pre staršie verzie s vysokou pravdepodobnosťou budú fungovať v novších, avšak s retrokompatibilitou môžu vzniknúť problémy, pretože počas rokov vývoja v PowerShell pribudlo množstvo nových príkazov. Zistenie verzie príkazového rozhrania nainštalovaného na počítači je možné pomocou vlastnosti PSVersion zo vstavaného premennej $PSVersionTable:
$PSVersionTable.PSVersion 
Môžete tiež využiť príkaz:
Get-Variable -Name PSVersionTable –ValueOnly 
To isté sa robí aj pomocou príkazu Get-Host. V skutočnosti existuje množstvo možností, ale na ich použitie je potrebné naučiť sa jazyk PowerShell, čomu sa budeme venovať v .
Zhrnutie
Spoločnosti Microsoft sa podarilo vytvoriť naozaj mocný príkazový shell s pohodlným integrovaným prostredím pre vývoj skriptov. Na rozdiel od nám známych nástrojov zo sveta Unix sa vyznačuje hĺbkovou integráciou s operačnými systémami rodiny Windows, ako aj s softvérom pre ne a platformou .NET Core. PowerShell môžeme nazvať objektovo orientovaným shellom, pretože príkazy a používateľské funkcie vracajú objekty alebo polia objektov a môžu ich prijímať ako vstup. Myslíme si, že tento nástroj by mali ovládať všetci správcovia serverov na Windows: obdobie, keď mohli zvládnuť bez príkazového riadku, je preč. Pokročilý príkazový shell je obzvlášť potrebný na , ale to je už úplne iný príbeh.
Len registrovaní používatelia sa môžu zúčastniť prieskumu. , prosím.
Aké témy by sme mali najprv rozobrať v nasledujúcich článkoch cyklu?
53,2%Programovanie v PowerShell123
42,4%Funkcie a moduly PowerShell98
22,1%Ako podpisovať vlastné skripty?51
12,1%Práca s úložiskami prostredníctvom poskytovateľov (providers)28
57,6%Automatizácia administrácie počítačov pomocou PowerShell133
30,7%Správa softvéru a integrácia spustiteľných komponentov PowerShell do tretích produktov71
Hlasovalo 231 používateľov. Zdržalo sa 37 používateľov.
Zdroj: habr.com
