IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

2. diel - PowerShell - Syntax, príkazy a rúra (pipeline)

V predchádzajúcej lekcii, PowerShell pre začiatočníkov , článku sme sa zoznámili s frameworkom PowerShell všeobecne s pár jeho príkazy.

V dnešnej lekcii kurze PowerShell frameworku sa zoznámime s pár príkazy, so syntaxou príkazov a základnú prácu s rúrou (pipeline).

PowerShell príkaz (cmdlet)

Príkaz (anglicky statement) je najmenší samostatný prvok programu v imperatívnych programovacích jazykoch vyjadrujúce nejakú činnosť, ktorá má byť vykonaná. (Zdroj Wikipedia)
Microsoft má veľmi kvalitne spracovanú dokumentáciu pre vývoj vlastných PowerShell funkcií, commandletů a modulov, vrátane pravidiel, ktoré by mal správny vývojár dodržať.

Všetky pridané odkazy na Microsoft dokumentáciu odkazujú na PowerShell verziu 5.1, ktorá je stále najčastejšie používaná.

Čo sa týka PowerShellu, príkaz má jasne dané pravidlá, ako by mal vyzerať (schválne uvádzam, že by mal, pretože PowerShell umožňuje úplnú voľnosť):

  • príkaz sa skladá z dvoch častí sloveso a

    podstatné meno oddelené spojovníkom (Verb-Noun), napr. Invoke-Command

  • sloveso a
  • podstatné meno oddelené spojovníkom (Verb-Noun), napr. Invoke-Command
  • sloveso by malo byť použité zo zoznamu povolených slovies (approved verbs). Tento zoznam získame buď príkazom Get-Verb alebo online v Microsoft dokumentácii
  • podstatné meno je jednotného čísla (singular), teda napr. Set-Service je správne, nie Set-Services
  • vybrané sloveso musí zodpovedať logike príkazu, teda sloveso Get nie je nikdy použité pre príkazy, ktoré napríklad manipulujú s obsahom súboru na disku. Všeobecne platí, že Get príkazy sú brané ako nedeštruktívne a vykonáva len dotaz na daný objekt.
  • každý natívny príkaz má k dispozícii nápovedu, ktorú zobrazíme príkazom Get-Help, napr. Get-Help Set-Content -Full (parameter -Full je voliteľný parameter príkazu Get-Help a zobrazí kompletné nápovedu daného príkazu is ukážkou (example))

Get príkazy sú vhodné pre začiatočníkov, ktorí začínajú experimentovať s PowerShell. Príkazom Get-Command -Verb Get alebo Get-Command Get-* zobrazíme všetky Get príkazy v danej aplikačnej doméne.

Ukážka výstupu príkazu Get-Help Get-Date:

NAME
    Get-Date

SYNOPSIS
    Gets the current date and time.


SYNTAX
    Get-Date [[-Date] <DateTime>] [-Day <Int32>] [-DisplayHint {Date | Time | DateTime}] [-Format <String>] [-Hour <Int32>] [-Millisecond <Int32>] [-Minute <Int32>] [-Month <Int32>] [-Second <Int32>] [-Year
    <Int32>] [<CommonParameters>]

    Get-Date [[-Date] <DateTime>] [-Day <Int32>] [-DisplayHint {Date | Time | DateTime}] [-Hour <Int32>] [-Millisecond <Int32>] [-Minute <Int32>] [-Month <Int32>] [-Second <Int32>] [-UFormat <String>] [-Year
    <Int32>] [<CommonParameters>]


DESCRIPTION
    The Get-Date cmdlet gets a DateTime object that represents the current date or a date that you specify. It can format the date and time in several Windows and UNIX formats. You can use Get-Date to
    generate a date or time character string, and then send the string to other cmdlets or programs.


RELATED LINKS
    Online Version: http://go.microsoft.com/fwlink/?LinkId=821781
    New-TimeSpan
    Set-Date

REMARKS
    To see the examples, type: "get-help Get-Date -examples".
    For more information, type: "get-help Get-Date -detailed".
    For technical information, type: "get-help Get-Date -full".
    For online help, type: "get-help Get-Date -online"

Poďme sa bližšie pozrieť na výstup príkazu Get-Help:

  • NAME - táto vlastnosť špecifikuje názov príkazu, pre ktorý zobrazujeme nápovedu
  • SYNOPSIS - krátky popis príkazu
  • SYNTAX - syntax príkazu vrátane argumentov. Pri každom argumentu je zobrazený požadovaný vstupný dátový typ
  • DESCRIPTION - detailný popis príkazu
  • RELATED LINKS - ďalšie odkazy spojené s týmto príkazom. Online Version tag určuje online verziu pomocníka, ktorého zobrazenie parametrom -Online, napríklad Get-Help Get-Date -Online
  • REMARKS - ďalšie hint a ukážky ako pracovať s nápovedou pre daný príkaz

Zadaním príkazu Get v PowerShellu väčšinou dostaneme špecifikované vlastnosti objektu. To ale neznamená, že daný objekt nemá viac vlastností. Aby sme zobrazili všetky vlastnosti daného objektu, použijeme príkaz Select-Object * za použitia rúry. Funkcionalitu príkazu Select-Object si ešte viac rozoberieme neskôr.

Ukážka výstupu základných vlastností objektu, pomocou príkazu Get-Item, ktorý všeobecne vracia informácie o danom objekte v ceste. Celý príkaz je Get-Item C:\test\highlight.zip, súbor musí existovať:

    Directory: C:\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        7/30/2020  12:28 PM         266162 highlight.zip

Ukážka výstupu všetkých vlastností objektu pomocou sekvencie príkazov Get-Item C:\test\highlight.zip | Select-Object *:

PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\test\highlight.zip
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\test
PSChildName       : highlight.zip
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : False
Mode              : -a----
VersionInfo       : File:             C:\test\highlight.zip
                    InternalName:
                    OriginalFilename:
                    FileVersion:
                    FileDescription:
                    Product:
                    ProductVersion:
                    Debug:            False
                    Patched:          False
                    PreRelease:       False
                    PrivateBuild:     False
                    SpecialBuild:     False
                    Language:

BaseName          : highlight
Target            : {}
LinkType          :
Name              : highlight.zip
Length            : 266162
DirectoryName     : C:\test
Directory         : C:\test
IsReadOnly        : False
Exists            : True
FullName          : C:\test\highlight.zip
Extension         : .zip
CreationTime      : 7/30/2020 12:28:20 PM
CreationTimeUtc   : 7/30/2020 10:28:20 AM
LastAccessTime    : 7/30/2020 12:28:21 PM
LastAccessTimeUtc : 7/30/2020 10:28:21 AM
LastWriteTime     : 7/30/2020 12:28:21 PM
LastWriteTimeUtc  : 7/30/2020 10:28:21 AM
Attributes        : Archive

PowerShell a rúra (pipeline)

Rúra je v PowerShellu jedna z najsilnejších vecí celého frameworku. Na rozdiel od klasických textových shellov, (napríklad bash alebo Windows Command Line) vie PowerShell poslať rúrou celé objekty, vrátane všetkých vlastností a metód.

Pozrime sa na tento ukážkový príklad príkazu:

'C:\test\highlight.zip','C:\test\output.txt' | Get-Item | Select-Object FullName, Length, LastAccessTime, LastWriteTime, Mode | Sort-Object Length -Descending | Format-List

Vráti nám nasledujúci výstup:

FullName       : C:\test\highlight.zip
Length         : 266162
LastAccessTime : 7/30/2020 12:28:21 PM
LastWriteTime  : 7/30/2020 12:28:21 PM
Mode           : -a----

FullName       : C:\test\output.txt
Length         : 32
LastAccessTime : 7/30/2020 1:21:29 PM
LastWriteTime  : 7/30/2020 1:21:29 PM
Mode           : -a----

Teraz si celý príkaz popíšeme:

  • 'C:\test\highlight.zip','C:\test\output.txt' - dva reťazce (stringy), ktoré sú odovzdané jeden po druhom do rúry |
  • Get-Item - príkaz si postupne prevezme obaja reťazca a vykoná príkaz s danou cestou
  • Select-Object FullName, Length, LastAccessTime, LastWriteTime, Mode - prevezme rúrou výstup každého Get-Item príkazu a vyberie len danej vlastnosti objektu (Select-Object * vždy vracia všetky vlastnosti objektu, čo môže byť niekedy nežiaduci)
  • Sort-Object Length -Descending - príkaz zoradia výsledok všetkých objektov odovzdanej rúrou a to zostupne (-Descending) podľa vlastnosti Length
  • Format-List - príkaz naformátuje celý výsledok do listu (defaultný je tabuľka)
Nie každý commandlet vie spracovať vstup pomocou rúry. To, ktorý príkaz a na akom parametra vie prijať vstup cez rúru, zistíme pomocou príkazu Get-Help s parametrom -Full v sekcii PARAMETERS, napríklad Get-Help Get-Service -Full. Pozrime sa na parameter (čiže argument) Name a jeho atribúty:
-Name <String[]>
        Specifies the service names of services to be retrieved. Wildcards are permitted. By default, this cmdlet gets all of the services on the computer.

        Required?                    false
        Position?                    0
        Default value                None
        Accept pipeline input?       True (ByPropertyName, ByValue)
        Accept wildcard characters?  false
  • Najprv si môžeme všimnúť, aký typ údajov argument -Name akceptuje, v tomto prípade je to pole reťazcov (string array definovaný ako String[]).
  • Ďalej vidíme opis tohto argumentu, po ktorom nasledujú atribúty argumentu: Required? - určuje, či je tento argument povinný.

    Position? - určuje pozíciu argumentu (PowerShell vie prijať vstupné argumenty ako podľa mena, tak i pozicionálně).

    Default value - definuje defaultný (predvolené) hodnotu argumentu. V prípade hodnoty None je prázdna.

    Accept pipeline input? - určuje, či daný argument podporuje vstup z rúry: False znamená, že daný parameter nevie prijať vstup z rúry.

    True znamená, že daný parameter vie prijať vstup z rúry. V tomto prípade tu môže byť uvedený atribút ByPropertyName, ByValue alebo ValueFromRema­iningArguments. Nie je neobvyklé že commandlet či funkcia má viac parametrov ktoré vie prijať vstup z rúry.

    Accept wildcard characters? určuje či daný argument podporuje wildcardové masky, ako napríklad *. Ako príklad môže slúžiť príkaz Set-Item a jeho tvrdenie -Path

  • Required? - určuje, či je tento argument povinný.
  • Position? - určuje pozíciu argumentu (PowerShell vie prijať vstupné argumenty ako podľa mena, tak i pozicionálně).
  • Default value - definuje defaultný (predvolené) hodnotu argumentu. V prípade hodnoty None je prázdna.
  • Accept pipeline input? - určuje, či daný argument podporuje vstup z rúry: False znamená, že daný parameter nevie prijať vstup z rúry.

    True znamená, že daný parameter vie prijať vstup z rúry. V tomto prípade tu môže byť uvedený atribút ByPropertyName, ByValue alebo ValueFromRema­iningArguments. Nie je neobvyklé že commandlet či funkcia má viac parametrov ktoré vie prijať vstup z rúry.

  • False znamená, že daný parameter nevie prijať vstup z rúry.
  • True znamená, že daný parameter vie prijať vstup z rúry. V tomto prípade tu môže byť uvedený atribút ByPropertyName, ByValue alebo ValueFromRema­iningArguments. Nie je neobvyklé že commandlet či funkcia má viac parametrov ktoré vie prijať vstup z rúry.
  • Accept wildcard characters? určuje či daný argument podporuje wildcardové masky, ako napríklad *. Ako príklad môže slúžiť príkaz Set-Item a jeho tvrdenie -Path

Pre dnešný lekciu pre kurz PowerShell to bolo všetko:)

V ďalšej lekcii, PowerShell - Dátové typy a práce s objektmi , si ukážeme prácu s PowerShell profilmi.


 

Predchádzajúci článok
PowerShell pre začiatočníkov
Všetky články v sekcii
PowerShell
Preskočiť článok
(neodporúčame)
PowerShell - Dátové typy a práce s objektmi
Článok pre vás napísal Vojtěch Kašný
Avatar
Užívateľské hodnotenie:
4 hlasov
Aktivity