
Slovník použitých pojmů a zkratek
- cmdlet: je konkretní příkaz PowerShellu, např.
Get-Date
- pipeline: v češtině známá jako roura, je mechanismus předávání dat a informaci mezi příkazy
Struktura příkazu
Každý příkaz PowerShellu se skládá ze 2 hlavních částí Verb-Noun
, čili sloveso a podstatné jméno
Verb
je sloveso, které definuje aktivitu, např.Get
,Set
,New
atd. Pro kompletní seznam a informace o dostupných slovesech spusťte v terminálu příkazGet-Verb
Noun
je podstatné udává cíl slovesa, např.Start-Service
neboRemove-Item
. Podstatné jména jsou vždy v jednotném čísle
Get-Service
Get-Services

Při psaní vlastních skriptů je velice doporučeno používat stejnou jmennou konvenci Verb-Noun
i při názvů skriptů. Tedy pokud můj skript např. vytvoří konfigurační soubor s daným obsahem, můj se skript se bude jmenovat New-ConfigurationFile.ps1
V pozdějších článcích si ukážeme co je PowerShell modul a jak si takový modul vytvořit
Při tvorbě vlastních modulů si jméno funkcí (příkazů) definujeme sami. I když nám Powershell umožňuje flexibilní pojmenování, i v tomto případě bychom měli dodržovat standartní jmennou konvenci Verb-Noun
Pokuď daný příkaz akceptuje vstupní parametry, tyto se definují buď
- pozicionálně. K tomuto je nutná znalost daného příkazu a číslo pozice parametru, např.
Get-Service winmgmt
- použitím jména parametru. Každé jméno parametru je uvozeno pomlčkou, např.
Get-Service -Name winmgmt
Pro začátečníky doporučuji používat na začátku a při testování Get
příkazy, ktere nejsou destruktivní, tzn. nemění stav cíle (podstatné jméno), např. Stop-Service winrm
💡Příkazem Get-Command Get-*
získáte kompletní seznam Get
příkazů
💡Pro každý příkaz je možné zobrazit nápovědu pomocí příkazu Get-Help
, např. Get-Help Get-Date -Full
pro kompletní nápovědu nebo Get-Help Get-Date -Online
pro online nápovědu
Roura neboli pipeline
Jedna z nejsilnějších funkcionalit PowerShellu je pipeline, která, narozdíl od textových terminálů jako Windows CMD nebo Bash, umí přes rouru poslat kompletní datovou strukturu
Podívejme se na ukázkovou definici kódu níže
- i když je tato definice trošku neefektivní, skvělé poslouží jako ukázka
- příkaz
Get-Service
zobrazí všechny služby (pouze na Windows) a pošle je přes rouru do dalšího příkazuWhere-Object
- tento příkaz vyfiltruje danou službu a výsledek pošle přes rouru do příkazu
Start-Service
, který se pokusí službu nastartovat, parametr-Passthru
taktéž zobrazí objekt služby, jinak tento příkaz proběhne tiše
Get-Service | Where-Object { $_.Name -eq 'winrm' } | Start-Service -PassThru
A zde je výsledek
Status Name DisplayName
------ ---- -----------
Running WinRM Windows Remote Management (WS-Managem…
Vše je objekt
V PowerShellu existuje pravidlo, že, až na pár vyjímek a pokuď příkaz neprobíhá tiše, každý výstup z jakéhokoliv příkazu je objekt určitého typu
Jako vyjímky uveďme například
Out-Null
příkaz potlačí jakýkoliv výstup, např.Get-Date | Out-Null
Write-Host
příkaz vypisuje pouze text (možnost změny barvy) do konzole, ale neprodukuje žádný datový výstup ani objekt
Každý datový typ má různé členy (vlastnosti a metody)
V PowerShellu existuje metoda .GetType()
a příkaz Get-Member
, který nám pomůže při práci s určitým datovým typem
Podívejme se na metodu .GetType()
Name MemberType Definition
---- ---------- ----------
Add Method datetime Add(timespan value)
AddDays Method datetime AddDays(double value)
AddHours Method datetime AddHours(double value)
AddMicroseconds Method datetime AddMicroseconds(double value)
AddMilliseconds Method datetime AddMilliseconds(double value)
AddMinutes Method datetime AddMinutes(double value)
AddMonths Method datetime AddMonths(int months)
AddSeconds Method datetime AddSeconds(double value)
AddTicks Method datetime AddTicks(long value)
AddYears Method datetime AddYears(int value)
Date Property datetime Date {get;}
Day Property int Day {get;}
DayOfWeek Property System.DayOfWeek DayOfWeek {get;}
DayOfYear Property int DayOfYear {get;}
Hour Property int Hour {get;}
Kind Property System.DateTimeKind Kind {get;}
Microsecond Property int Microsecond {get;}
Millisecond Property int Millisecond {get;}
Minute Property int Minute {get;}
Month Property int Month {get;}
Name MemberType Definition
---- ---------- ----------
Add Method datetime Add(timespan value)
AddDays Method datetime AddDays(double value)
AddHours Method datetime AddHours(double value)
AddMicroseconds Method datetime AddMicroseconds(double value)
AddMilliseconds Method datetime AddMilliseconds(double value)
AddMinutes Method datetime AddMinutes(double value)
AddMonths Method datetime AddMonths(int months)
AddSeconds Method datetime AddSeconds(double value)
AddTicks Method datetime AddTicks(long value)
AddYears Method datetime AddYears(int value)
Date Property datetime Date {get;}
Day Property int Day {get;}
DayOfWeek Property System.DayOfWeek DayOfWeek {get;}
DayOfYear Property int DayOfYear {get;}
Hour Property int Hour {get;}
Kind Property System.DateTimeKind Kind {get;}
Microsecond Property int Microsecond {get;}
Millisecond Property int Millisecond {get;}
Minute Property int Minute {get;}
Month Property int Month {get;}
Nyní se podívejme na příkaz Get-Member
(výstup z příkazu byl v této ukázce zkrácen)
Name MemberType Definition
---- ---------- ----------
Add Method datetime Add(timespan value)
AddDays Method datetime AddDays(double value)
AddHours Method datetime AddHours(double value)
AddMicroseconds Method datetime AddMicroseconds(double value)
AddMilliseconds Method datetime AddMilliseconds(double value)
AddMinutes Method datetime AddMinutes(double value)
AddMonths Method datetime AddMonths(int months)
AddSeconds Method datetime AddSeconds(double value)
AddTicks Method datetime AddTicks(long value)
AddYears Method datetime AddYears(int value)
Date Property datetime Date {get;}
Day Property int Day {get;}
DayOfWeek Property System.DayOfWeek DayOfWeek {get;}
DayOfYear Property int DayOfYear {get;}
Hour Property int Hour {get;}
Kind Property System.DateTimeKind Kind {get;}
Microsecond Property int Microsecond {get;}
Millisecond Property int Millisecond {get;}
Minute Property int Minute {get;}
Month Property int Month {get;}
Name MemberType Definition
---- ---------- ----------
Add Method datetime Add(timespan value)
AddDays Method datetime AddDays(double value)
AddHours Method datetime AddHours(double value)
AddMicroseconds Method datetime AddMicroseconds(double value)
AddMilliseconds Method datetime AddMilliseconds(double value)
AddMinutes Method datetime AddMinutes(double value)
AddMonths Method datetime AddMonths(int months)
AddSeconds Method datetime AddSeconds(double value)
AddTicks Method datetime AddTicks(long value)
AddYears Method datetime AddYears(int value)
Date Property datetime Date {get;}
Day Property int Day {get;}
DayOfWeek Property System.DayOfWeek DayOfWeek {get;}
DayOfYear Property int DayOfYear {get;}
Hour Property int Hour {get;}
Kind Property System.DateTimeKind Kind {get;}
Microsecond Property int Microsecond {get;}
Millisecond Property int Millisecond {get;}
Minute Property int Minute {get;}
Month Property int Month {get;}
Rozdíl mezi metodou a vlastností
- metoda (z angl. method) nám umožnuje interakci s daným objektem a volá se jménem metody a kulatýma závorkama. Některé metody očekávají také vstup. Na ukázce výše můžeme např. přidat minuty k objektu datum a čas použitím metody
(Get-Date).AddMinutes(15)
- vlastnost (z angl. property) nám vrátí informaci o dané vlastnosti, např.
(Get-Date).DayOfWeek
nám vrátí den v týdnu. Některé vlastnosti jsou pouze pro čtení (READ-ONLY), některé mohou byt přepsány
Přípony souborů
PowerShell používá několik typů přípon souborů, uveďme zde pár hlavních
.ps1
je spustitelný skript, ktery je možné zavolat z terminálu pomocí celé cesty skriptu.psm1
je PowerShell modul. PowerShell modulům se budeme věnovat později ve vybraných článcích.psd1
je datový soubor PowerShellu. Je taktéž použit jako řídící soubor (manifest file) pro PowerShell modul
V dalších článcích se budeme věnovat PowerShellu více do hloubky