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-Verbalebo online v Microsoft dokumentácii - podstatné meno je jednotného čísla
(singular), teda napr.
Set-Serviceje správne, nieSet-Services - vybrané sloveso musí zodpovedať logike príkazu, teda
sloveso
Getnie je nikdy použité pre príkazy, ktoré napríklad manipulujú s obsahom súboru na disku. Všeobecne platí, žeGetprí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-Fullje voliteľný parameter príkazuGet-Helpa 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ápoveduSYNOPSIS- krátky popis príkazuSYNTAX- syntax príkazu vrátane argumentov. Pri každom argumentu je zobrazený požadovaný vstupný dátový typDESCRIPTION- detailný popis príkazuRELATED 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íkladGet-Help Get-Date -OnlineREMARKS- ď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 cestouSelect-Object FullName, Length, LastAccessTime, LastWriteTime, Mode- prevezme rúrou výstup každéhoGet-Itemprí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 LengthFormat-List- príkaz naformátuje celý výsledok do listu (defaultný je tabuľka)
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
-Nameakceptuje, v tomto prípade je to pole reťazcov (string array definovaný akoString[]). - Ď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 hodnotyNoneje prázdna.Accept pipeline input?- určuje, či daný argument podporuje vstup z rúry:Falseznamená, že daný parameter nevie prijať vstup z rúry.Trueznamená, že daný parameter vie prijať vstup z rúry. V tomto prípade tu môže byť uvedený atribút ByPropertyName, ByValue alebo ValueFromRemainingArguments. 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íkazSet-Itema 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 hodnotyNoneje prázdna.Accept pipeline input?- určuje, či daný argument podporuje vstup z rúry:Falseznamená, že daný parameter nevie prijať vstup z rúry.Trueznamená, že daný parameter vie prijať vstup z rúry. V tomto prípade tu môže byť uvedený atribút ByPropertyName, ByValue alebo ValueFromRemainingArguments. Nie je neobvyklé že commandlet či funkcia má viac parametrov ktoré vie prijať vstup z rúry.Falseznamená, že daný parameter nevie prijať vstup z rúry.Trueznamená, že daný parameter vie prijať vstup z rúry. V tomto prípade tu môže byť uvedený atribút ByPropertyName, ByValue alebo ValueFromRemainingArguments. 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íkazSet-Itema 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.

