Powershell: Pipelining
Z MiS
(Rozdíly mezi verzemi)
(Dokončení formátování, -eq místo =.) |
m (Opravy formátu v sekci Filtrování.) |
||
Řádka 54: | Řádka 54: | ||
| Where-object | | Where-object | ||
| Where | | Where | ||
− | + | ; Lze využít | |
− | *Zastupuje aktuální objekt z kolekce | + | # <code>$_</code> |
− | + | #* Zastupuje aktuální objekt z kolekce. | |
− | + | #* Můžeme pracovat s vlastnostmi tohoto objektu. | |
− | * Spustí kód v závorkách. | + | # <code>{''...''}</code> |
− | * Pokud vrací $true, ponechá objekt v kolekci | + | #* Spustí kód v závorkách. |
− | * Pokud vrací $false, zahodí objekt | + | #* Pokud spuštěný kód vrací pro tento objekt z kolekce <code>$true</code>, ponechá tento objekt v kolekci. |
+ | #* Pokud vrací <code>$false</code>, zahodí tento objekt. | ||
+ | <div class="Priklad"> | ||
+ | Get-Service | Where {$_.Status -eq "Running"} | ||
+ | </div> | ||
; Operátory | ; Operátory |
Verze z 7. 1. 2019, 07:25
Obsah[skrýt] |
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
N
polož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
- Lze využít
-
$_
- Zastupuje aktuální objekt z kolekce.
- Můžeme pracovat s vlastnostmi tohoto objektu.
-
{...}
- Spustí kód v závorkách.
- Pokud spuštěný kód vrací pro tento objekt z kolekce
$true
, ponechá tento objekt v kolekci. - Pokud vrací
$false
, zahodí tento objekt.
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.
- 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)