Powershell: Pipelining

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Vytvoření stránky - zatím bez formátování.)
 
m (Filtrování: Doplněna možnost zkracování -Filter jako výchozí parametr.)
(Není zobrazeno 6 mezilehlých verzí od 1 uživatele.)
Řádka 17: Řádka 17:
  
 
== Zpracování ==
 
== Zpracování ==
*| Get-methods
 
**Aliasy:
 
***gm
 
**Vypisuje:
 
***Typ objektu
 
****Dobré, abych zjistil, s čím pracuji!
 
***Název, typ a popis atributů (properties)
 
***Název a popis metod
 
*| Select
 
**-property
 
***Zobrazí vybrané vlastnosti objektu
 
***get-childitem | select -property name,length | sort -property length -Descending
 
**-ExpandProperty
 
***Skoro stejné jako -Property <#ID_1153443337>
 
***Dostanu jen hodnoty, bez nadpisu s názvem hodnoty
 
***Vhodné pro použití uvnitř (...) <#ID_1421125970>
 
**-First N
 
***Prvních N položek
 
*| Sort
 
**-Descending
 
**-Property propertyName
 
***Podle čeho se bude řadit
 
*| Measure
 
**Počítá počet řádků
 
**Get-Verb | Measure
 
  
 +
| Get-Member
 +
* Zjištění vlastností objektu, který dostane na vstupu.
 +
* Mohu využít jako pomocnou metodu pro zjištění, s&nbsp;jakými objekty pracuji.
 +
*Vypisuje:
 +
**Typ objektu
 +
**Název, typ a popis atributů (properties)
 +
**Název a popis metod
 +
* Alias: <code>gm</code>
 +
 +
| Select
 +
* Zobrazí pouze některé vlastnosti objektů (projekce).
 +
* <code>-Property ''PropertyName1'',''PropertyName2'',''...''</code>
 +
<div class="Priklad">
 +
Get-ChildItem | Select -Property Name,Length | Sort -Property Length -Descending
 +
</div>
 +
* <code>-ExpandProperty</code>
 +
** Skoro stejné jako <code>-Property</code>, ale nezobrazuje nadpisy sloupců, pouze hodnoty.
 +
** Vhodné pro použití uvnitř <code>(...)</code>
 +
* <code>-First ''N''</code>
 +
** Prvních <code>''N''</code> položek.
 +
 +
| Sort
 +
* <code>-Descending</code>
 +
* <code>-Property ''PropertyName''</code>
 +
** Podle čeho se bude řadit.
 +
 +
| Measure
 +
* Zjistí počet objektů na výstupu commandletu.
 +
<div class="Priklad">
 +
Get-Verb | Measure
 +
</div>
  
 
== Filtrování ==
 
== Filtrování ==
*| Where-object
+
| Where-Object
*| Where
+
* Commandlet pro obecné filtrování.
**$_
+
* Aliasy: <code>Where</code>
***Zastupuje aktuální objekt z kolekce
+
***Get-Service | Where {$_.status = "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
+
****-gt
+
****-like
+
***Logické
+
****-and
+
**Nejprve filtruj, pak zpracovávej
+
***Optimalizace výkonu
+
**Zjednodušená syntaxe
+
***| Where podmínka
+
***| Where Status="Running"
+
****Funguje jen pro služby, nebo nefunguje???
+
***Get-ChildItem | Where Name -like "*.xls"
+
  
 +
* <code>-FilterScript {''...''}</code>
 +
** Je default parametr, takže stačí i: <code> {''...''}</code>
 +
** Spustí kód v závorkách.
 +
** Pokud spuštěný kód vrací pro daný objekt <code>$false</code>, <code>$null</code> nebo <code>""</code>, zahodí objekt. Jinak objekt ponechá v&nbsp;kolekci.
 +
 +
* Lze využít: <code>$_</code>
 +
** Zastupuje aktuální objekt z kolekce.
 +
** Můžeme pracovat s&nbsp;vlastnostmi tohoto objektu.
 +
<div class="Priklad">
 +
Get-Service | Where {$_.Status -eq "Running"}
 +
</div>
 +
 +
* <code>-Property ''Vlastnost'' ''operátor'' ''Hodnota''</code>
 +
** Je default parametr, takže stačí i: <code>''Vlastnost'' ''operátor'' ''Hodnota''</code>
 +
<div class="Priklad">
 +
Get-Service | Where Status -eq "Running"
 +
</div>
 +
 +
; Operátory
 +
* Porovnání
 +
** <code>-eq</code>... přesná rovnost (pro textové řetězce &rarr; musí se přesně shodovat)
 +
** <code>-gt</code>
 +
** <code>-like</code>... „podobnost“
 +
*** Pro textové řetězce &rarr; text musí obsahovat zadanou posloupnost jako podřetězec.
 +
*** Umožní používat metaznaky <code>*</code> a <code>?</code>.
 +
*** Podobné jako v&nbsp;SQL.
 +
* Logické operátory
 +
** <code>-and</code>
 +
** ...
 +
; Doporučený postup
 +
* Nejprve filtruj, pak zpracovávej! (Podobně jako v&nbsp;SQL.)
 +
* Optimalizace výkonu.
 +
 +
; Pro filtrování je lépe použít parametr <code>-Filter</code>
 +
* Ale ne všechny příkazy ho mají.
 +
<div class="Priklad">
 +
Místo:
 +
Get-ChildItem | Where Name -like "*.xls"
 +
Můžeme tedy psát:
 +
Get-ChildItem -Filter "*.xls"
 +
Nebo dokonce:
 +
Get_ChildItem *.xls
 +
</div>
  
 
== Výstup do souboru ==
 
== Výstup do souboru ==
*... | Out-File blabla.txt
+
... | Out-File vystup.txt
  
  
 
== Předávání dat ==
 
== Předávání dat ==
*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&nbsp;pipeline.
*Přijímání vstupu
+
 
**by value
+
=== Přijímání vstupu ===
***Přímo předáváme objekty
+
* by value
***Typ objektů si musí odpovídat.
+
** Přímo předáváme objekty.
**by Property Name
+
** Typ objektů na výstupu prvního commandletu musí odpovídat typu objektu, který očekává na vstupu zpracovávající commandlet.
***Get-Process calc | dir
+
* by Property Name
****Spusť předtím kalkulačku
+
** Přijímající commandlet očekává objekt, který má konkrétní vlastnost.
****Zobrazí obsah adresáře, ve kterém je program, který realizuje proces Calc
+
** Na samotném typu předávaného objektu nezáleží, důležité je, že má tuto konkrétní vlastnost.
*Předávání počítačů
+
<div class="Priklad">
**Get-ADComputers
+
Get-Process ''calc'' | dir
**Nelze je předávat jako objekty přímo.
+
*Spusť předtím kalkulačku
**Lze použít {...}:
+
*Zobrazí obsah adresáře, ve kterém je program, který realizuje proces Calc.
***Get-ADComputers -Filter * | Get-WMIObjects -class Win32_bios -ComputerName {$_.Name}
+
</div>
**Mnoho příkazů umí:
+
 
***-ComputerName
+
=== Předávání počítačů ===
***Get-WMIObjects -class Win32_bios -ComputerName (Get-ADComputers -Filter *).Name
+
* Počítače nelze předávat jako objekty přímo.
***PS 2.0
+
 
****Lze kombinovat se závorkou a:
+
; Lze použít <code>{...}</code>:
*****-ExpandProperty
+
<div class="Priklad">
****Get-WMIObjects -class Win32_bios -ComputerName (Get-ADComputers -Filter *| Select -ExpandProperty name)
+
Get-ADComputers -Filter * | Get-WMIObjects -class Win32_bios -ComputerName {$_.Name}
 +
</div>
 +
 
 +
; Mnoho příkazů umí také:
 +
* <code>-ComputerName</code>
 +
<div class="Priklad">
 +
Get-WMIObjects -class Win32_bios -ComputerName (Get-ADComputers -Filter *).Name
 +
</div>
 +
 
 +
; Lze kombinovat se závorkou a&nbsp;<code>-ExpandProperty</code>
 +
<div class="Priklad">
 +
Get-WMIObjects -class ''Win32_bios'' -ComputerName (Get-ADComputers -Filter ''*'' | Select -ExpandProperty ''name'')
 +
</div>

Verze z 10. 1. 2022, 12:19


Obsah

Princip

Get-Process *ss | Where handles -gt 900 | Sort handles
Get-Service Sym* | Stop-Service -WhatIf


Zpracování

| Get-Member
| Select
Get-ChildItem | Select -Property Name,Length | Sort -Property Length -Descending
| Sort
| Measure
Get-Verb | Measure

Filtrování

| Where-Object
Get-Service | Where {$_.Status -eq "Running"}
Get-Service | Where Status -eq "Running"
Operátory
Doporučený postup
Pro filtrování je lépe použít parametr -Filter

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

Přijímání vstupu

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čů

Lze použít {...}
Get-ADComputers -Filter * | Get-WMIObjects -class Win32_bios -ComputerName {$_.Name}
Mnoho příkazů umí také
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)
Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje