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, nieSet-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í, žeGet
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íkazuGet-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á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 -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 cestouSelect-Object FullName, Length, LastAccessTime, LastWriteTime, Mode
- prevezme rúrou výstup každéhoGet-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 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
-Name
akceptuje, 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 hodnotyNone
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 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-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 hodnotyNone
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 ValueFromRemainingArguments. 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 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-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.