Lekce 1 - PowerShell pro začatečníky
Vítejte v dnešní úvodní lekci kurzu PowerShell frameworku, kde se seznámíme s hostem, vysvětlíme si základní pojmy, seznámíme se s prostředím a ukážeme si jeho částečné přizpůsobení. Dále si ukážeme, jak začít pracovat s PowerShellem na denní bázi, jeho výhody, nevýhody a limity.
Oficiální definice
Nejdříve si uvedeme oficiální definici PowerShellu:
PowerShell (dříve známý jako Microsoft Shell, Windows PowerShell, MSH nebo pod kódovým označením Monad) je rozšiřitelný textový (řádkový) shell se skriptovacím jazykem od společnosti Microsoft. Produkt je založen na platformě .NET Framework a z toho vyplývá i jeho odlišnost od ostatních shellů, místo textové roury, jak je tomu u UNIX shellu, obsahuje PowerShell rouru objektovou. (zdroj: Wikipedia)
Windows PowerShell is an interactive object-oriented command environment with scripting language features that utilizes small programs called cmdlets to simplify configuration, administration, and management of heterogeneous environments in both standalone and networked typologies by utilizing standards-based remoting protocols. (zdroj: Microsoft Technet, Ed Wilson).
V překladu to znamená toto:
PowerShell je interaktivní, objektově orientované příkazové prostředí s podporou skriptování, které za využití malých programů nazývaných commandlety, usnadňuje konfigurační management, administraci a správu v heterogenních prostředích a to jak samostatných, tak i síťových a to za použití vzdálených protokolů.
Můžeme vidět dva různé zdroje a každý z nich má různý pohled na definici PowerShell frameworku. Pojďme si to rozebrat laicky. PowerShell je objektový na rozdíl od ostatních shellů (bash, Windows, cmd,...), primárně pracuje s objekty. Je multiplatformní a od verze Core 6 je možnost jej nainstalovat i na operační systémy Linux, MacOS a další (celý list podporovaných operačních systémů). PowerShell je mimo to modulový. Jednoduše řečeno, formou přídavných modulů je PowerShell možný rozšířit o další funkcionality.
PowerShell není jen "lepší" příkazová řádka, ale rovnou úplný framework. Jinak řečeno, je to stavebnice, kterou lze snadno a rychle přizpůsobit pro potřeby uživatele.
K práci s PowerShellem není nutná znalost dalšího skriptovacího či programovacího jazyka, tudíž je vhodný i pro úplné začátečníky.
PowerShell je obsažen v operačním systému Windows 7 a vyšší (či Windows Server 2008R2 a vyšší). Na ostatní operační systémy (MacOS, Linux, ...) je možné PowerShell doinstalovat. PowerShell má přímý přístup k .NET třídám, tudíž je lze přímo využívat z PowerShellu a není nutno používat jen cmdlety, o nichž se dočteme níže.
Proč PowerShell?
Důvodů, proč začít s PowerShellem je hned několik:
- Dá se velice snadno naučit a pochopit.
- Lze jej lehce kombinovat s různými nástroji a aplikacemi (API, databáze, správa operačních systémů).
- Je primárně určen k automatizaci a tuto práci odvádí skvěle.
- Možnost tvorby vlastních modulů a tudíž rozšiřitelnost o vlastní funkcionality.
- Je naprosto zdarma, jediná investice je čas a chuť se jej naučit.
- Zájem o PowerShell raketově roste (Google Trends), tudíž jeho znalost při hledání práce je velké plus.
- V dnešní době je v top žebříčku skriptovacích jazyků nejen pro Windows prostředí.
- Je prostě cool , i když se pár much najde .
Základní pojmy
Nyní, když jsme si PowerShell v rychlosti představili, pojďme se s ním seznámit blíže. Nejprve si vysvětlíme základní pojmy:
- PowerShell host - rozhraní aplikace PowerShell. Obecně známe console host (či terminál) a PowerShell ISE (či jiné preferované vývojářské rozhraní)
- Cmdlet - nativní příkaz PowerShell frameworku (commandlet). Časem se dozvíme, že existují i nenativní (custom) příkazy, či funkce
- Parametr - způsob předání vstupu funkci, skriptu či cmdletu
- Snippet - užitečný kousek kódu, např.:
function Verb-Noun {param ($ParamName) # code here}
- Aplikační doména - zaručuje izolaci knihoven a bezpečnostní nastavení pro danou exekuci či hosta
- Alias - "přezdívka" pro příkaz, neboli zkrácená forma příkazu
- přípona .ps1 - spustitelný skript PowerShellu. Ke spouštění skriptů je potřeba mít povolenou ExecutionPolicy
- přípona .psm1 - určuje soubor s modulem PowerShell
- přípona .psd1 - určuje datový soubor PowerShellu nebo manifest modulu
PowerShell není case sensitive (nerozlišuje velká a malá
písmena) jako například unixové shelly. Tudíž např. proměnná
$TestVar
je interpretována stejně jako $testvar
PowerShell host
V základu rozlišujeme console host (tedy terminál) a ISE (Integrated Scripting Environment), které už není nadále podporováno Microsoftem a je nahrazen Visual Studio Code aplikací.
Co se týče přizpůsobení hosta, PowerShell používá profily, které
jsou volitelné (PowerShell je nutně nepotřebuje). Profil není nic jiného,
než spustitelný .ps1
script, který je očekáván v dané
lokalitě (tato lokalita je uložena v proměnné $PROFILE
). O
profilech se budeme bavit více v dalších lekcích.
Kde jej vlastně najdu?
Pokud jste v prostředí Windows (či Windows Server), stačí otevřít vyhledávání, napsat PowerShell a vybrat Windows PowerShell:
Console host (neboli terminál)
Console host je určen k volání skriptů a jednořádkovým příkazům. I když to tento typ hosta umožňuje, není vhodný pro skriptování. Vypadá takto:
ISE host (Integrated Scripting Environment)
PowerShell ISE vypadá následovně:
Jelikož Microsoft již nepodporuje PowerShell ISE (i když je možné nadále jej využívat), v průběhu lekcí budeme pracovat s Visual Studio Code:
Visual Studio Code má svého vlastního hosta, ale obecně jej řadíme do ISE hostů.
Ať už klasické ISE nebo Visual Studio Code s rozšířením pro PowerShell, obě tyto varianty jsou určeny pro development a debugging skriptů.
Jelikož instalace a nastavení Visual Studio Code není součástí lekce, doporučuji navštívit následující článek pro instalaci
Verze PowerShell
První verze 1.0 vyšla v listopadu 2006. Poslední verze 5.1 primárně pro Windows vyšla v lednu 2017. Touto verzí Microsoft ukončil podporu pro Windows PowerShell a přešel na multiplatformní PowerShell Core. Momentálně je poslední verze PowerShell 7, ale verze 5.1 zůstává i nadále funkční a v prostředí Microsoft je stále nejrozšířenější. Na obrázku níže můžeme vidět verze PowerShellu (vlastnost Version) pro různé operační systémy. Taktéž je možné vidět přizpůsobené prostředí pomocí profilů.
Použitá aplikace: Microsoft Terminal.
Aktuální verzi PowerShell frameworku vypíšeme pomocí
příkazu Get-Host
, vypsáním proměnné $host
či
proměnné $PSVersionTable
.
Výstup PowerShell příkazu
PowerShell pracuje s objekty, tudíž Get
příkazy vrací
objekt. Dejme tomu, že chceme dostat objekt běžícího procesu
notepad.exe
:
Barevné rámečky si ihned popíšeme:
- Úplně nahoře můžeme vidět, že tento objekt je datového typu
System.Diagnostics.Process
(více o datových typech PowerShellu v dalších lekcích) - Zeleným rámečkem je zvýrazněn defaultní výstup
příkazu
Get-Process notepad
. - Modrým rámečkem jsou metody daného objektu.
- Červeným rámečkem pokračují vlastnosti, které nejsou na výpisu všechny vidět.
Výstupu a práci s příkazy se budeme více věnovat v další lekci
Jak tedy začít
Nejjednodušší je začít s příkazy Get
, které jsou,
řekněme, nedestruktivní. Pak je důležité znát zadání úlohy.
Jedna z mých počátečních úloh bylo reportování Active Directory
uživatelů a úprava těchto reportů pro zákazníka.
Hlavní je nebát se, pokud se naučíte používat příkaz
Get-Help
, není se čeho bát . Úlohy na začátek si
předvedeme názorně v dalších lekcích.
V další lekci, PowerShell - Syntaxe, příkazy a roura (pipeline), si ukážeme syntaxi příkazů a použití roury.