19Aug
V tomto vydaní Geek School sa pozrieme na formátovanie, filtrovanie a porovnávanie objektov v potrubí.
Uistite sa, že ste si prečítali predchádzajúce články v sérii:
- Naučte sa automatizovať systém Windows so systémom PowerShell
- Naučiť sa používať kódy v PowerShell
- Učíme sa používať objekty v PowerShell
A zostávajte ladený celý zvyšok série celý týždeň.
Predvolené formátovanie
Keď som prvýkrát začal používať PowerShell, myslel som si, že všetko je kúzlo, ale pravdou je, že trvá trochu času, aby sme pochopili, čo sa deje pod kapotou. To isté platí pre formátovací systém PowerShell. V skutočnosti, ak spustíte Get-Service cmdlet, generovaný výstup zobrazí iba tri vlastnosti: Status, Name a DisplayName.
Ak však doručíte Get-Service na Get-Member, uvidíte, že objekty ServiceController majú oveľa viac ako len tieto tri vlastnosti, takže čo sa deje?
Odpoveď leží v skrytom súbore, ktorý definuje, ako väčšina vstavaných rutín zobrazuje ich výstup. Ak chcete získať pochopenie, zadajte do shellu nasledujúce a stlačte kláves enter. Poznámkový blok
C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Ak použijeme funkciu hľadania poznámkového bloku, môžeme rýchlo preskočiť na sekciu, ktorá podrobne opisuje výstup cmdletu Get-Service vyhľadaním ServiceControllertypu.
Náhle môžete vidieť, že pod kapotou PowerShell sa naformátujú všetky objekty v potrubí, ktoré sú typu ServiceController a vytvorí sa tabuľka s tromi stĺpcami: Status, Name a DisplayName. Ale čo, ak typ, s ktorým máte čo do činenia, nemá záznam v tomto súbore alebo iný formátový súbor? No, je to vlastne celkom jednoduché.Ak objekt vychádzajúci z potrubia má 5 alebo viac vlastností, PowerShell zobrazí všetky vlastnosti objektu v zozname;ak má menej ako 5 vlastností, zobrazuje ich v tabuľke.
Formátovanie vašich údajov
Ak nie ste spokojní s predvoleným formátovaním objektu alebo typu, môžete rozbaliť vlastné formátovanie. Existujú tri cmdlety, ktoré potrebujete vedieť.
- Formát-Zoznam
- Formát-Tabuľka
- Formát-Široký
Formát-Široký jednoducho berie kolekciu objektov a zobrazí jednu vlastnosť každého objektu.Štandardne bude vyhľadávať vlastnosť názvu;ak vaše objekty neobsahujú vlastnosť názvu, použije prvú vlastnosť objektu, akonáhle sú vlastnosti zoradené abecedne.
Get-Service |
vo formáte WD Ako vidíte, je tiež predvolené dva stĺpce, hoci môžete určiť ako vlastnosť, ktorú chcete použiť, ako aj počet stĺpcov, ktoré chcete zobraziť.
Get-Service |Format-Wide -Property DisplayName -Kolón 6
Ak je niečo nakonfigurované ako tabuľka štandardne, môžete ho vždy prepnúť do zobrazenia zoznamu pomocou rutiny Format-List. Poďme sa pozrieť na výstup cmdlet Get-Process.
Toto tabuľkové zobrazenie skutočne vyhovuje tomuto typu informácií veľmi dobre, ale predstierame, že ho chceme zobraziť vo forme zoznamu. Všetko, čo naozaj musíme urobiť, je dúfať do formátu .
Get-ProcessZoznam formátov
Ako vidíte, v predvolenom nastavení sú v zozname iba štyri položky. Ak chcete zobraziť všetky vlastnosti objektu, môžete použiť zástupný znak.
Get-ProcessFormát-Zoznam-Vlastníctvo *
Prípadne môžete vybrať len požadované vlastnosti.
Get-ProcessZoznam formátov - názov vlastníctva, id
Formát-tabuľka, na druhej strane, berie dáta a zmení ich do tabuľky. Vzhľadom na to, že naše dáta zo služby Get-Process sú už vo forme tabuľky, môžeme ju použiť na ľahké výbery vlastností, ktoré chceme zobraziť v tabuľke. Použil som parameter AutoSize, aby sa všetky údaje prispôsobili jednej obrazovke.
Get-ProcessFormát-názov tabuľky, id -AutoSize
Filtrovanie a porovnávanie
Jednou z najlepších vecí o použití potrubia založeného na objektoch je to, že môžete použiť filtrovanie objektov z potrubia v ľubovoľnom kroku pomocou rutiny Where-Object.
Get-Service |Kde-objekt{ $ _. Stav -eq "beh"}
Použitie, kde je objekt skutočne veľmi jednoduchý.$ _ predstavuje aktuálny objekt potrubia, z ktorého si môžete vybrať vlastnosť, ktorú chcete filtrovať.Tu sa nachádzajú iba objekty, v ktorých sa stav Vlastnosť rovná spusteniu. Existuje niekoľko porovnávacích operátorov, ktoré môžete použiť vo filtrovanom bloku skriptu:
- eq( Equal To)
- neq( nie je rovný)
- gt( väčší než
- ge)
- lt( menej ako
- )le( menej ako alebo rovnaké)
- ako( Wildcard String Match)
Úplný zoznam a ďalšie informácie je možné prezerať v koncepčnom súbore nápoveda about_comparison, avšak niekedy trvá zvyknúť si na syntax Where-Object. To je všetko pre tento čas!