
Slovník použitých pojmů a zkratek
- snippet: krátký, předdefinovaný kousek pomocného kódu
- IntelliSense: auto kompletace či našeptávač kódu
Definice funkcionality
Před tím, než vůbec začneme tvořit náš první kód, je třeba definovat, k čemu tento skript vlastně použijeme a na jakém operačním systému poběží
Funkcionalita našeho skriptu bude tato
- ukaž top n procesů dle využití paměti
- zobraz pouze jméno, čas kdy proces nastartoval, cestu kde proces běží a využitou paměť v těchto volitelných jednotkách na 2 desetinná místa (kromě default)
- default (Byte)
- KB (KiloByte)
- MB (MegaByte)
- GB (GigaByte)
- seřaď výsledek dle využité paměti sestupně
- náš skript poběží na operačním systému Windows, Linux a macOS
Začínáme
Ve VSCODE si vytvoříme skript ve vámi zvolené složce a pojmenujem ho třeba Get-TopProcess.ps1
Pokuď si nejste jistí, jaké sloveso nebo jméno skriptu použít nebo jak použít nápovědu k příkazu, mrkněte na článek Základy PowerShellu
param (
[int]$Top = 5,
[ValidateSet('Default', 'KB', 'MB', 'GB')]
$Unit = 'Default'
)
Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object Name, StartTime, Path, @{
n = "WorkingSet"
e = {
$WS = $_.WorkingSet
switch ($Unit) {
'Default' { $WS }
{ $_ -match 'KB|MB|GB' } { [math]::Round(($WS / "1${Unit}"), 2) }
}
}
} -First $Top
Použité příkazy a bloky
Param
Definuje parametry, čili vstup, skriptu.
V našem případě definujeme 2 parametry $Top
a $Unit
$Top
definuje počet vrácených procesů, defaultní hodnota je nastavena na 5$Unit
definuje jednotku využité paměti, defaultní hodnota je nastavena na Default. Tento parametr má také nastavenou validaci, v tomto případěValidateSet
, který přesně definuje možné hodnoty tohoto parametru- pokud na vstupu použijeme hodnotu, která není definována touto validací, PowerShell zahlásí chybu
Cannot validate argument on parameter 'Unit'.
The argument "TB" does not belong to the set "Default,KB,MB,GB" specified by the ValidateSet attribute.
Supply an argument that is in the set and then try the command again
- pokud na vstupu použijeme hodnotu, která není definována touto validací, PowerShell zahlásí chybu
param (
[int]$Top = 5,
[ValidateSet('Default', 'KB', 'MB', 'GB')]
$Unit = 'Default'
)
Get-Process a Sort-Object
Příkaz Get-Process
zobrazí momentálně spuštěné procesy a příkaz Sort-Object
je seřadí dle zvolené vlastnosti, v našem případě WorkingSet
- pro více informací použijte příkaz
Get-Help Get-Process -Full
aGet-Help Sort-Objec
t-Full
Get-Process |
Sort-Object WorkingSet -Descending
Select-Object
Příkaz Select-Object
vybere určené vlastnosti z objektu
Tento příkaz také mění typ datového objektu, v našem případe z Process
na PSCustomObject
- pro více informací použijte příkaz
Get-Help Select-Object -Full
Select-Object Name, StartTime, Path, @{
n = "WorkingSet"
e = {
$WS = $_.WorkingSet
switch ($Unit) {
'Default' { $WS }
{ $_ -match 'KB|MB|GB' } { [math]::Round(($WS / "1${Unit}"), 2) }
}
}
} -First $Top
Součástí bloku níže je take definice custom vlastnosti za pomocí definice hashtable
- různým datovým typům, blokům a jejich definicím se budeme později věnovat v dalších článcích
Jméno vlastnosti je definována výrazem n = "WorkingSet"
a hodnota výrazem e={...}
se skript blokem uvnitř
@{
n = "WorkingSet"
e = {
$WS = $_.WorkingSet
switch ($Unit) {
'Default' { $WS }
{ $_ -match 'KB|MB|GB' } { [math]::Round(($WS / "1${Unit}"), 2) }
}
}
}
Tento výraz se dá zapsat také pomocí celých jmen klíčů
@{
Name = "WorkingSet"
Expression = {
$WS = $_.WorkingSet
switch ($Unit) {
'Default' { $WS }
{ $_ -match 'KB|MB|GB' } { [math]::Round(($WS / "1${Unit}"), 2) }
}
}
}
IntelliSense a snippet v akci
Při zadavání bloku param
nám snippet nabízí dostupné předdefinované kousky kódu
Při psaní příkazů, např. Get-Process
nám IntelliSense nabízí dostupné parametry, popř. dostupné data pro parametry z příkazu vlevo před rourou (pipeline)
💡VSCODE je možné rozšířít o vlastní snippety

Zde je ukázka formátování kódu pomocí námi nainstalovaným pluginem Prettier
Formátování se dá vyvolat pomocí zkratky ALT+SHIFT+F nebo z nabídky (pravý klik do editoru)

Spuštění skriptu
Před spuštěním se ujistěte že kód v sekci Začínáme máme uložen a soubor má příponu .ps1
V mém případě je skript uložen v cestě C:\temp\Get-TopProcess.ps1
C:\temp\Get-TopProcess.ps1
C:\temp\Get-TopProcess.ps1 -Unit MB
C:\temp\Get-TopProcess.ps1 -Unit MB | ConvertTo-Json

V dalších článcích si ukážeme jak skript transformovat do PowerShell funkce