Vývojářský blog Jaromíra Nechanického

Tisk článku Tisk článku

Začínáme s PowerShellem II.

[Zpět na blog]

Datum: 24. 1. 2010 1:26       Autor: Jaromír Nechanický       Zobrazeno: 662x


V tomto díle si představíme, jak funguje objektová PipeLine v PowerShellu.

Pokud nejste s principe fungování PipeLine seznámení z jiných jazyků (například již zmiňovaný bash), pak vězte, že myšlenka je velmi jednoduchá. Jedná v podstatě o přeposlání výstupu z jednoho příkazu (CmdLetu) na vstup druhého příkazu (CmdLetu). Jak již sám název napovídá, můžete si PipeLine představit jako kdybyste propojili dva příkazy trubkou a tou trubkou posílali data. Jedná se o jednosměrnou komunikaci.

PipeLIne má značku | a její použití si ukážeme v následujícím příkladu. Tento příklad vypíše všechny txt soubory v adresáři a smaže je.

 Get-ChildItem *.txt | Remove-Item

Výhodou je, že narozdíl od bashe, či většiny unixových shellů PowerShell je objektový. To znamená, že zatímco v linuxu vám skrz PipeLine “přiteče” do dalšího příkazu pouhý text, který musíte složitě parsovat a upravovat, v PowerShellu tečou objekty. K aktuálně zpracovávanému objektu se dostaneme pomocí speciální proměnné $_.Nejste-li si jistí, jakého typu je objekty, který vám přiteče, můžete použít příkaz get-member. Následující příkaz vypíše všechny vlastnosti souboru, které můžete volat/vypsat.

 Get-ChildItem | Get-Member

Filtrování dat

Velmi často budete chtít data profiltrovat. K tomu slouží příkaz where-object, případně jeho alias ?. Podmínku píšete do složených závorek. PowerShell má následující logické operátory:

Operátor C# ekvivalent Popis
-eq == obě strany jsou si rovny
-ne != strany si nejsou rovny
-le <= levá strana menší, nebo rovna pravé
-lt < levá strana menší, než pravá
-ge >= levá strana větší, nebo rovna pravé
-gt > levá strana větší, než pravá
-like   porovná levou stranu oproti masce (* libovolný počet znaků, ? právě 1 libovolný znak)
-notlike   jako –like , ovšem negovaný
-match   porovná levou stranu oproti regulárnímu výrazu
-notmatch   jako –match , ale negovaný

 

Následující příkaz zjistí běžící procesy a vyfiltruje z nich pouze ty, které zabírají více jak 50MB paměti.

 Get-Process | ?{$_.PM -gt 50000000}

Nyní bysme ještě chtěli výsledky setřídit, abychom měli přehled o největších žroutech.

 Get-Process | ?{$_.PM -gt 50000000} | Sort-Object -Property PM

Další velmi užitečný příkazem je Foreach-Object. Tento příkaz projde postupně všemi daty, která přitekla a provede na nich blok příkazu. Následující příkaz vytvoří soubory pojmenované 1-10.

Poznámka: příkaz 1..10 vytvoří pole čísel od 1 do 10ti.

  1..10 | ForEach-Object {New-Item -ItemType file -name $_}

Formátování výstupu

V první řadě bych rád zmínil několik příkazů, které slouží pro vypsání hlášek na konzoli/do výstupu.

 Write-Host "hello world" #vypíše na konzoli, ovšem nepřepošle objekt dále PipeLine
Write-Output "hello world" #pošle objekt skrze PipeLine

Pro formátování výstupu slouží příkazy Format-Table a Format-List.

 gps | Sort-Object -Property name | Format-Table -GroupBy name #vypíše procesy ve více tabulkách rozdělených dle jména
gps | Format-Table -Property name, PM #vypíše procesy a zobrazí u nich pouze název a spotřebovávanou paměť
gps | format-table ProcessName,@{Label="TotalRunningTime"; Expression={(get-date) - $_.StartTime}} #zobrazí procesy a zobrazí u nich název a TotalRunningTime, který je vypočítáván
 ls | Format-List #vypíše seznam souborů, ale informace o nich zobrazí jako list
gps | Format-List -Property name,@{Label="Memory";Expression={$_.PM}}#vypíše seznam procesů a zobrazí pouze vlastnosti Name a PM, kde PM přejmenuje na "Memory"

Chcete-li použít “hezčí” zobrazení, můžete použít příkaz Out-Gridview, který vám umožní v GUI třídit a filtrovat.

 gps | Out-GridView

Poslední dva příkazy pro práci s výstupem, které si ukážeme jsou Out-File a Out-Printer.

 gps | Out-File procesy.txt #uloží seznam běžících procesů do souboru procesy.txt
gps | Format-List -Property name |Out-Printer -Name 'Microsoft XPS Document Writer' #vytiskne seznam běžících procesů (pouze jméno)

> Na začátek

 

Hodnocení:

Hlasů: 3
Zvolte své hodnocení

Jaromír Nechanický


RSS Feed RSS Feed

Diskuse

1 

Vytváření článků

Datum: 24.1.2010 1:42
Autor: Ondřej Linhart
Hodnocení autora: 417
Příspěvků: 1237
Proti obsahové stránce nic nemám, jen bych poznamenal že by bylo možná lepší články na pokračování vytvářet jako článek a ne jako blog, na články s více díly je tady funkce pro vytvoření seriálu.
 
           [Odpovědět]
 
Hodnocení: 2 Čekejte, prosím...
1 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.