Menu

Základy PowerShellu

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říkaz Get-Verb
  • Noun je podstatné udává cíl slovesa, např. Start-Service nebo Remove-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říkazu Where-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

5 1 hlasovat
Hodnocení článku
0 Komentáře
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře