Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti

Historicky jsou nástroje příkazového řádku na unixových systémech vyvinuty lépe než na Windows, ale s příchodem nového řešení se situace změnila.

Windows PowerShell umožňuje správcům systému automatizovat většinu rutinních úloh. S ním můžete měnit nastavení, zastavovat a spouštět služby a také provádět údržbu většiny nainstalovaných aplikací. Bylo by špatné vnímat modré okno jako další interpret příkazů. Tento přístup neodráží podstatu inovací navrhovaných společností Microsoft. Ve skutečnosti jsou možnosti Windows PowerShellu mnohem širší: v krátké sérii článků se pokusíme přijít na to, jak se řešení Microsoftu liší od nástrojů, které známe více.

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti

Klíčové vlastnosti 

Windows PowerShell je samozřejmě především příkazový shell se skriptovacím jazykem, původně postavený na .NET Framework a později na .NET Core. Na rozdíl od prostředí, které přijímají a vracejí textová data, Windows PowerShell pracuje s třídami .NET, které mají vlastnosti a metody. PowerShell umožňuje spouštět běžné příkazy a také poskytuje přístup k objektům COM, WMI a ADSI. Využívá různá úložiště, jako je souborový systém nebo registr Windows, pro přístup k nimž je tzv. dodavatelů. Za zmínku stojí možnost zabudování spustitelných komponent PowerShellu do jiných aplikací pro implementaci různých operací, vč. přes grafické rozhraní. Platí to i obráceně: mnoho aplikací Windows poskytuje přístup ke svým rozhraním pro správu prostřednictvím prostředí PowerShell. 

Windows PowerShell umožňuje:

  • Změna nastavení operačního systému;
  • Řídit služby a procesy;
  • Konfigurace rolí a komponent serveru;
  • Instalace softwaru;
  • Správa nainstalovaného softwaru prostřednictvím speciálních rozhraní;
  • Vkládání spustitelných komponent do programů třetích stran;
  • Vytvářejte skripty pro automatizaci administrativních úloh;
  • Práce se systémem souborů, registrem Windows, úložištěm certifikátů atd.

Shell a vývojové prostředí

Windows PowerShell existuje ve dvou podobách: kromě emulátoru konzoly s příkazovým shellem existuje Integrated Scripting Environment (ISE). Pro přístup k rozhraní příkazového řádku jednoduše vyberte příslušnou zkratku z nabídky Windows nebo spusťte powershell.exe z nabídky Spustit. Na obrazovce se objeví modré okno, znatelně odlišné ve schopnostech od předpotopního cmd.exe. Existuje automatické dokončování a další funkce známé uživatelům příkazových shellů pro systémy Unix.

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti

Chcete-li pracovat s shellem, musíte 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 znak po znaku;
  • Ctrl+Home odstraní napsaný text od pozice kurzoru na začátek řádku;
  • Ctrl+End odstraní text od kurzoru po konec řádku.

F7 zobrazí okno se zadanými příkazy a umožní vám vybrat jeden z nich. Konzole funguje i s výběrem textu pomocí myši, kopírováním a vkládáním, polohováním kurzoru, mazáním, backspace – vše, co máme rádi.

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti
Windows PowerShell ISE je kompletní vývojové prostředí s editorem kódu s kartami a zvýrazněnou syntaxí, tvůrcem příkazů, vestavěným ladicím programem a dalšími potěšeními z programování. Pokud v editoru vývojového prostředí napíšete za název příkazu pomlčku, dostanete všechny dostupné možnosti v rozevíracím seznamu s uvedením typu. PowerShell ISE můžete spustit buď pomocí zástupce ze systémové nabídky, nebo pomocí spustitelného souboru powershell_ise.exe.

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti

Cmdlets 

V prostředí Windows PowerShell je tzv. rutiny. Jedná se o specializované třídy .NET, které poskytují různé funkce. Jmenují se Action-Object (nebo Verb-Noun, chcete-li) a odkaz oddělený pomlčkou připomíná predikát a předmět ve větách přirozeného jazyka. Například Get-Help doslova znamená „Get-Help“ nebo v kontextu PowerShellu: „Show-Help“. Ve skutečnosti se jedná o obdobu příkazu man v unixových systémech a manuály v PowerShellu je nutné vyžadovat tímto způsobem, nikoli voláním cmdletů pomocí klávesy --help nebo /?. Nezapomeňte na online dokumentaci PowerShellu: Microsoft to má docela podrobné.

Kromě Get používají rutiny další slovesa k označení akcí (a nejen sloves, přísně vzato). V níže uvedeném seznamu uvádíme několik příkladů:

Add - přidat;
Clear - Průhledná;
Enable - zapnout;
Disable - vypnout;
New - vytvořit;
Remove - smazat;
Set - dotázat se;
Start - běhat;
Stop - stop;
Export - export;
Import - import.

Existují systémové, uživatelské a volitelné rutiny: v důsledku spuštění všechny vrátí objekt nebo pole objektů. Nerozlišují velká a malá písmena, tzn. z pohledu interpretru příkazů není mezi Get-Help a get-help žádný rozdíl. Znak ';' se používá pro oddělení, ale je nutné jej vložit pouze v případě, že je na stejném řádku spuštěno několik rutin. 

Rutiny prostředí Windows PowerShell jsou seskupeny do modulů (NetTCPIP, Hyper-V atd.) a existuje rutina Get-Command pro vyhledávání podle objektu a akce. Nápovědu k tomu můžete zobrazit takto:

Get-Help Get-Command

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti

Ve výchozím nastavení příkaz zobrazuje stručnou nápovědu, ale parametry (argumenty) jsou předávány rutinám podle potřeby. S jejich pomocí můžete například získat podrobnou (parametr -Detailed) nebo plnou (parametr -Full) nápovědu a také zobrazit příklady (parametr -Examples):

Get-Help Get-Command -Examples

Nápovědu v prostředí Windows PowerShell aktualizuje rutina Update-Help. Pokud se ukáže, že příkazový řádek je příliš dlouhý, lze argumenty rutiny přesunout na další tak, že napíšete servisní znak '`' a stisknete Enter - pouhé dokončení psaní příkazu na jednom řádku a pokračování na jiném nebude fungovat.

Zde je několik příkladů běžných rutin: 

Get-Process - zobrazit běžící procesy v systému;
Get-Service — ukázat služby a jejich stav;
Get-Content - zobrazit obsah souboru.

Pro často používané rutiny a externí nástroje má Windows PowerShell krátká synonyma – aliasy. Například dir je alias pro Get-ChildItem. V seznamu synonym jsou také analogy příkazů z unixových systémů (ls, ps atd.) a rutina Get-Help se volá příkazem help. Úplný seznam synonym lze zobrazit pomocí rutiny Get-Alias ​​​​:

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti

Skripty, funkce, moduly a jazyk PowerShell

Skripty prostředí Windows PowerShell se ukládají jako soubory ve formátu prostého textu s příponou .ps1. Nelze je spustit dvojitým kliknutím: musíte pravým tlačítkem vyvolat kontextovou nabídku a vybrat položku „Spustit v PowerShellu“. Z konzole budete muset buď zadat úplnou cestu ke skriptu, nebo přejít do příslušného adresáře a napsat název souboru. Spouštění skriptů je také omezeno systémovými zásadami a ke kontrole aktuálního nastavení můžete použít rutinu Get-ExecutionPolicy, která vrátí jednu z následujících hodnot:

Restricted — spouštění skriptů je zakázáno (ve výchozím nastavení);
AllSigned - je povoleno pouze spouštění skriptů podepsaných důvěryhodným vývojářem;
RemoteSigned - povoleno spouštět podepsané a vlastní skripty;
Unrestricted - povoleno spouštět libovolné skripty.

Správce má dvě možnosti. Nejbezpečnější zahrnuje podepisování skriptů, ale to je docela vážná magie – budeme se jím zabývat v dalších článcích. Nyní pojďme cestou nejmenšího odporu a změňme politiku:

Set-ExecutionPolicy RemoteSigned

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti
K tomu bude nutné spustit PowerShell jako správce, i když zásadu pro aktuálního uživatele můžete změnit pomocí speciálního nastavení.

Skripty jsou psány v objektově orientovaném programovacím jazyce, jehož příkazy jsou pojmenovány podle stejného principu jako dříve zvažované rutiny: "Action-Object" ("Verb-Noun"). Jeho hlavním účelem je automatizace administrativních úloh, ale je to plnohodnotný interpretovaný jazyk, který má všechny potřebné konstrukce: podmíněný skok, smyčky, proměnné, pole, objekty, zpracování chyb atd. Pro skriptování je vhodný jakýkoli textový editor, ale nejlepší je spustit Windows PowerShell ISE.

Parametry můžete předat skriptu, učinit je povinnými a také nastavit výchozí hodnoty. Windows PowerShell také umožňuje vytvářet a volat funkce stejným způsobem jako rutiny pomocí konstrukce Function a složených závorek. Skript s funkcemi se nazývá modul a má příponu .psm1. Moduly musí být uloženy v adresářích definovaných v proměnných prostředí PowerShell. Můžete je zobrazit pomocí následujícího příkazu:

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

Dopravníky

V posledním příkladu jsme použili konstrukci, která je známá uživatelům unixového shellu. Ve Windows PowerShell vám svislá lišta také umožňuje předat výstup jednoho příkazu vstupu jiného, ​​ale existuje významný rozdíl v implementaci potrubí: už nemluvíme o sadě znaků nebo nějakém text. Vestavěné rutiny nebo uživatelsky definované funkce vracejí objekty nebo pole objektů a mohou je také přijímat jako vstup. Stejně jako Bourne shell a jeho mnoho nástupců, PowerShell usnadňuje složité úkoly pomocí kanálu.

Nejjednodušší příklad potrubí vypadá takto:

Get-Service | Sort-Object -property Status

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti
Nejprve je spuštěna rutina Get-Service a poté jsou všechny služby, které přijímá, předány rutině Sort-Object k seřazení podle vlastnosti Status. To, kterému argumentu je předán výsledek předchozí části kanálu, závisí na jeho typu – obvykle je to InputObject. Tato problematika bude podrobněji rozebrána v článku věnovaném programovacímu jazyku PowerShell. 

Pokud chcete, můžete pokračovat v řetězci a předat výsledek Sort-Object do jiné rutiny (budou prováděny zleva doprava). Mimochodem, uživatelé Windows mají také přístup k designu známému všem Unixoidům pro výstup stránky po stránce: 

Get-Service | Sort-Object -property Status | more

Spouštění úloh na pozadí 

Dost často je potřeba spouštět určitý příkaz na pozadí, aby se nečekalo na výsledek jeho provedení v shell session. Pro tento případ má Windows PowerShell několik rutin:

Start-Job — spustit úlohu na pozadí;
Stop-Job — zastavit úlohu na pozadí;
Get-Job — zobrazit seznam úloh na pozadí;
Receive-Job — zobrazení výsledku provádění úlohy na pozadí;
Remove-Job — odstranění úlohy na pozadí;
Wait-Job - přenos úlohy na pozadí zpět do konzole.

Ke spuštění úlohy na pozadí použijeme rutinu Start-Job a určíme příkaz nebo sadu příkazů ve složených závorkách:

Start-Job {Get-Service}

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti
Úlohy na pozadí v prostředí Windows PowerShell lze manipulovat tím, že znáte jejich názvy. Nejprve se naučíme, jak je zobrazit:

Get-Job

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti
Nyní si ukážeme výsledek Job1:

Receive-Job Job1 | more

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti
Všechno je docela jednoduché.

Vzdálené provádění příkazů

Windows PowerShell umožňuje spouštět příkazy a skripty nejen na místním počítači, ale také na vzdáleném počítači a dokonce na celé skupině počítačů. Existuje několik způsobů, jak to provést:

  • Mnoho rutin má parametr -ComputerName, ale tímto způsobem nebude fungovat například vytvoření dopravníku;
  • Rutina Enter-PSSession umožňuje vytvořit interaktivní relaci na vzdáleném počítači; 
  • Pomocí rutiny Invoke-Command můžete spouštět příkazy nebo skripty na jednom nebo více vzdálených počítačích.

Verze PowerShellu

PowerShell se od svého prvního vydání v roce 2006 hodně změnil. Nástroj je k dispozici pro mnoho systémů běžících na různých hardwarový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. Nejnovější verze 6.2 vydaná 10. ledna 2018. Skripty napsané pro dřívější verze budou pravděpodobně fungovat i v pozdějších verzích, ale zpětné portování může být problematické, protože PowerShell zavedl během let vývoje velké množství nových rutin. Verzi příkazového prostředí nainstalovaného v počítači můžete zjistit pomocí vlastnosti PSVersion vestavěné proměnné $PSVersionTable:

$PSVersionTable.PSVersion

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti
Můžete také použít rutinu:

Get-Variable -Name PSVersionTable –ValueOnly

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti
Totéž lze provést pomocí rutiny Get-Host. Ve skutečnosti existuje mnoho možností, ale abyste je mohli používat, musíte se naučit programovací jazyk PowerShell, což budeme dělat v další článek

Výsledky 

Microsoftu se podařilo vytvořit opravdu výkonný shell s pohodlným integrovaným prostředím pro vývoj skriptů. Od nástrojů, které známe ze světa Unixu, se liší hlubokou integrací s operačními systémy rodiny Windows i se softwarem pro ně a platformou .NET Core. PowerShell lze nazvat objektově orientovaným prostředím, protože rutiny a uživatelsky definované funkce vracejí objekty nebo pole objektů a mohou je brát jako vstup. Myslíme si, že tento nástroj by měli vlastnit všichni správci serverů ve Windows: uplynula doba, kdy se mohli obejít bez příkazového řádku. Pokročilý konzolový shell je zvláště potřebný na naše levné VPS se systémem Windows Server Core, ale to je úplně jiný příběh.

Co je to Windows PowerShell a s čím se jí? Část 1: Klíčové vlastnosti

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Jakým tématům by se měly další články série věnovat jako první?

  • 53,2%Programování v PowerShell123

  • 42,4%Funkce a moduly PowerShell98

  • 22,1%Jak podepisovat vlastní skripty?51

  • 12,1%Práce s repozitáři prostřednictvím poskytovatelů (poskytovatelů)28

  • 57,6%Automatizujte správu počítače pomocí PowerShell133

  • 30,7%Správa softwaru a vkládání spustitelných souborů PowerShellu do produktů třetích stran71

Hlasovalo 231 uživatelů. 37 uživatelů se zdrželo hlasování.

Zdroj: www.habr.com

Přidat komentář