Powershell: Pipelining
Z MiS
				
				
				
				
																
				
				
								
				
Obsah | 
Princip
- Propojujeme několik příkazů tak, aby jeden příkaz předával svůj výstup místo na obrazovku dalšímu příkazu ke zpracování.
 - Na obrazovku se vypíše až výsledek celé posloupnosti příkazů.
 -  Zapisujeme tak, že mezi jednotlivé příkazy posloupnosti zapíšeme znak 
|.-  
|... znak „roura“, anglicky „pipe“ 
 -  
 -  Příkazy si předávají objekty, nikoli text!
- (Na rozdíl od Unixu a příkazového řádku Windows.)
 
 
Get-Process *ss | Where handles -gt 900 | Sort handles Get-Service Sym* | Stop-Service -WhatIf
Zpracování
| Get-Member
- Zjištění vlastností objektu, který dostane na vstupu.
 - Mohu využít jako pomocnou metodu pro zjištění, s jakými objekty pracuji.
 - Vypisuje:
- Typ objektu
 - Název, typ a popis atributů (properties)
 - Název a popis metod
 
 -  Alias: 
gm 
| Select
- Zobrazí pouze některé vlastnosti objektů (projekce).
 -  
-Property PropertyName1,PropertyName2,... 
Get-ChildItem | Select -Property Name,Length | Sort -Property Length -Descending
-  
-ExpandProperty-  Skoro stejné jako 
-Property, ale nezobrazuje nadpisy sloupců, pouze hodnoty. -  Vhodné pro použití uvnitř 
(...) 
 -  Skoro stejné jako 
 -  
-First N-  Prvních 
Npoložek. 
 -  Prvních 
 
| Sort
-  
-Descending -  
-Property PropertyName- Podle čeho se bude řadit.
 
 
| Measure
- Zjistí počet objektů na výstupu commandletu.
 
Get-Verb | Measure
Filtrování
| Where-Object
- Commandlet pro obecné filtrování.
 -  Aliasy: 
Where 
-  
-FilterScript {...}-  Je default parametr, takže stačí i: 
{...} - Spustí kód v závorkách.
 -  Pokud spuštěný kód vrací pro daný objekt 
$false,$nullnebo"", zahodí objekt. Jinak objekt ponechá v kolekci. 
 -  Je default parametr, takže stačí i: 
 
-  Lze využít: 
$_- Zastupuje aktuální objekt z kolekce.
 - Můžeme pracovat s vlastnostmi tohoto objektu.
 
 
Get-Service | Where {$_.Status -eq "Running"}
-  
-Property Vlastnost operátor Hodnota-  Je default parametr, takže stačí i: 
Vlastnost operátor Hodnota 
 -  Je default parametr, takže stačí i: 
 
Get-Service | Where Status -eq "Running"
- Operátory
 
-  Porovnání
-  
-eq... přesná rovnost (pro textové řetězce → musí se přesně shodovat) -  
-gt -  
-like... „podobnost“- Pro textové řetězce → text musí obsahovat zadanou posloupnost jako podřetězec.
 -  Umožní používat metaznaky 
*a?. - Podobné jako v SQL.
 
 
 -  
 -  Logické operátory
-  
-and - ...
 
 -  
 
- Doporučený postup
 
- Nejprve filtruj, pak zpracovávej! (Podobně jako v SQL.)
 - Optimalizace výkonu.
 
-  Pro filtrování je lépe použít parametr 
-Filter 
- Ale ne všechny příkazy ho mají.
 
Místo:
Get-ChildItem | Where Name -like "*.xls"
Můžeme tedy psát:
Get-ChildItem -Filter "*.xls"
Nebo dokonce:
Get_ChildItem *.xls
Výstup do souboru
... | Out-File vystup.txt
Předávání dat
- Commandlety mají v nápovědě informaci, jestli přijímají vstup z pipeline.
 
Přijímání vstupu
-  by value
- Přímo předáváme objekty.
 - Typ objektů na výstupu prvního commandletu musí odpovídat typu objektu, který očekává na vstupu zpracovávající commandlet.
 
 -  by Property Name
- Přijímající commandlet očekává objekt, který má konkrétní vlastnost.
 - Na samotném typu předávaného objektu nezáleží, důležité je, že má tuto konkrétní vlastnost.
 
 
Get-Process calc | dir
- Spusť předtím kalkulačku
 - Zobrazí obsah adresáře, ve kterém je program, který realizuje proces Calc.
 
Předávání počítačů
- Počítače nelze předávat jako objekty přímo.
 
-  Lze použít 
{...} 
Get-ADComputers -Filter * | Get-WMIObjects -class Win32_bios -ComputerName {$_.Name}
- Mnoho příkazů umí také
 
-  
-ComputerName 
Get-WMIObjects -class Win32_bios -ComputerName (Get-ADComputers -Filter *).Name
-  Lze kombinovat se závorkou a 
-ExpandProperty 
Get-WMIObjects -class Win32_bios -ComputerName (Get-ADComputers -Filter * | Select -ExpandProperty name)