Powershell: Pipelining
Z MiS
				
				
				(Rozdíly mezi verzemi)
				
																
				
				
								
				|  (Upraveno formátování.) |  (Dokončení formátování, -eq místo =.) | ||
| Řádka 56: | Řádka 56: | ||
|   $_ |   $_ | ||
| *Zastupuje aktuální objekt z kolekce | *Zastupuje aktuální objekt z kolekce | ||
| − |   Get-Service | Where {$_.status  | + |   Get-Service | Where {$_.status -eq "Running"} | 
|   {...} |   {...} | ||
| * Spustí kód v závorkách. | * Spustí kód v závorkách. | ||
| Řádka 78: | Řádka 78: | ||
| ; Zjednodušená syntaxe | ; Zjednodušená syntaxe | ||
|   | Where podmínka |   | Where podmínka | ||
| − |   | Where Status | + | <div class="Priklad"> | 
| + |   Get-Service | Where Status -eq "Running" | ||
|   Get-ChildItem | Where Name -like "*.xls" |   Get-ChildItem | Where Name -like "*.xls" | ||
| + | </div> | ||
| Řádka 89: | Řádka 91: | ||
| *Commandlety mají v nápovědě informaci, jestli přijímají vstup z pipeline. | *Commandlety mají v nápovědě informaci, jestli přijímají vstup z pipeline. | ||
| − | + | === Přijímání vstupu === | |
| − | *by value | + | * by value | 
| − | **Přímo předáváme objekty | + | ** Přímo předáváme objekty. | 
| − | **Typ objektů  | + | ** 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 | + | * by Property Name | 
| − |   Get-Process calc | dir | + | ** 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. | ||
| + | <div class="Priklad"> | ||
| + |   Get-Process ''calc'' | dir | ||
| *Spusť předtím kalkulačku | *Spusť předtím kalkulačku | ||
| − | *Zobrazí obsah adresáře, ve kterém je program, který realizuje proces Calc | + | *Zobrazí obsah adresáře, ve kterém je program, který realizuje proces Calc. | 
| + | </div> | ||
| − | + | === Předávání počítačů === | |
| − | + | * Počítače nelze předávat jako objekty přímo. | |
| − | + | ||
| − | + | ; Lze použít <code>{...}</code>: | |
| <div class="Priklad"> | <div class="Priklad"> | ||
|   Get-ADComputers -Filter * | Get-WMIObjects -class Win32_bios -ComputerName {$_.Name} |   Get-ADComputers -Filter * | Get-WMIObjects -class Win32_bios -ComputerName {$_.Name} | ||
| </div> | </div> | ||
| − | + | ||
| − | + | ; Mnoho příkazů umí také: | |
| + | * <code>-ComputerName</code> | ||
| <div class="Priklad"> | <div class="Priklad"> | ||
| − | Get-WMIObjects -class Win32_bios -ComputerName (Get-ADComputers -Filter *).Name | + |  Get-WMIObjects -class Win32_bios -ComputerName (Get-ADComputers -Filter *).Name | 
| </div> | </div> | ||
| − | ; Lze kombinovat se závorkou a | + | ; Lze kombinovat se závorkou a <code>-ExpandProperty</code> | 
| − | + | ||
| <div class="Priklad"> | <div class="Priklad"> | ||
| − |   Get-WMIObjects -class Win32_bios -ComputerName (Get-ADComputers -Filter *| Select -ExpandProperty name) | + |   Get-WMIObjects -class ''Win32_bios'' -ComputerName (Get-ADComputers -Filter ''*'' | Select -ExpandProperty ''name'') | 
| </div> | </div> | ||
Verze z 7. 1. 2019, 07:16
| 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-Methods
- 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
- Počítá počet řádků
Get-Verb | Measure
Filtrování
| Where-object | Where $_
- Zastupuje aktuální objekt z kolekce
Get-Service | Where {$_.status -eq "Running"}
{...}
- Spustí kód v závorkách.
- Pokud vrací $true, ponechá objekt v kolekci
- Pokud vrací $false, zahodí objekt
- 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.
- Zjednodušená syntaxe
| Where podmínka
Get-Service | Where Status -eq "Running" Get-ChildItem | Where Name -like "*.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)
