Geek School Learning Formatering, filtrering og sammenligning i PowerShell
I denne udgave af Geek School ser vi på formatering, filtrering og sammenligning af objekter i rørledningen.
Sørg for at læse de tidligere artikler i serien:
- Lær at automatisere Windows med PowerShell
- Lære at bruge Cmdlets i PowerShell
- Lære at bruge objekter i PowerShell
Og hold dig indstillet til resten af serien hele ugen.
Standardformatering
Da jeg først begyndte med PowerShell, troede jeg, at alt var magisk, men sandheden er, at det bare tager lidt tid at forstå, hvad der sker under hooden. Det samme gælder for PowerShell formateringssystemet. Faktisk, hvis du kører Get-Service cmdlet, viser den producerede produktion kun dig 3 egenskaber: Status, Navn og DisplayName.
Men hvis du rør Get-Service til Get-Member, ser du, at ServiceController-objekterne har meget mere end bare disse tre egenskaber, så hvad foregår der?
Svaret ligger i en skjult fil, der definerer, hvordan de fleste af de indbyggede cmdlets viser deres output. For at få en forståelse skal du skrive følgende i skalen og trykke på Enter.
notesblok C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Hvis vi bruger notesblokens Find-funktion, kan vi hurtigt springe til det afsnit, der detaljerer output fra Get-Service-cmdlet ved at søge efter ServiceController-typen.
Pludselig kan du se, at under hooden PowerShell formaterer objekter i pipeline, der er af typen ServiceController og opretter en tabel med tre kolonner: Status, Navn og DisplayName. Men hvad hvis den type, du har at gøre med, ikke har en post i den fil eller nogen anden formatfil for den sags skyld? Nå så er det ganske simpelt faktisk. Hvis objektet, der kommer ud af rørledningen, har 5 eller flere egenskaber, viser PowerShell alle objektets egenskaber i en liste; hvis den har mindre end 5 egenskaber, viser den dem i et bord.
Formatering af dine data
Hvis du ikke er tilfreds med standardformatering af et objekt eller en type, kan du rulle din egen formatering. Der er tre cmdlets, du skal vide for at gøre dette.
- Format-List
- Format-Table
- Format-Wide
Format-Wide tager simpelthen en samling objekter og viser en enkelt egenskab for hvert objekt. Som standard vil den søge efter en navneegenskab; Hvis dine objekter ikke indeholder en navneegenskab, vil det bruge objektets første egenskab, når ejendommene er sorteret alfabetisk.
Get-Service | Format-Wide
Som du kan se, er det også standard to kolonner, selvom du kan angive både hvilken ejendom du vil bruge, samt hvor mange kolonner du vil blive vist.
Get-Service | Format-Wide -Property DisplayName -Column 6
Hvis der som standard er formateret som et bord, kan du altid skifte det til listevisning ved at bruge cmdlet Format-liste. Lad os se på output fra Get-Process cmdlet.
Denne tabeloversigt passer faktisk godt til denne slags oplysninger, men lad os lade ud som om vi vil se det i listeformular. Alt, hvad vi virkelig skal gøre, er at rør det til Format-List.
Get-Process | Format-List
Som du kan se, er der som standard kun fire elementer, der vises i listen. For at se alle objektets egenskaber kan du bruge et wildcard-tegn.
Get-Process | Format-List -Property *
Alternativt kan du kun vælge de egenskaber, du ønsker.
Get-Process | Format-List -Property navn, id
Format-Table, på den anden side tager data og omdanner det til et bord. Da vores data fra Get-Process allerede er i form af et bord, kan vi bruge det til nemt at vælge egenskaber, vi ønsker at blive vist i tabellen. Jeg brugte parameteren AutoSize til at gøre alle dataene tilpasning på en enkelt skærm.
Get-Process | Format-tabel navn, id -AutoSize
Filtrering og sammenligning
En af de bedste ting ved at bruge en objektbaseret pipeline er, at du kan filtrere objekter ud af rørledningen på ethvert tidspunkt ved at bruge cmdlet hvor objektet er.
Get-Service | Hvor-objekt $ _. Status -eq "Running"
Brug af, hvor objektet faktisk er meget simpelt. $ _ repræsenterer det aktuelle pipelineobjekt, hvorfra du kan vælge en egenskab, du vil filtrere på. Her holder vi kun objekter, hvor statusegenskaben svarer til løbende. Der er et par sammenligningsoperatører, du kan bruge i filtrerings scriptblokken:
- eq (Equal To)
- neq (ikke lig med)
- gt (større end)
- ge (større end eller lige til)
- lt (mindre end)
- le (mindre end eller lig med)
- lignende (Wildcard String Match)
En komplet liste og flere oplysninger kan ses i den konceptuelle help file about_comparison, men det tager lidt tid at vænne sig til Synkronisationen Hvor-Obejekt. Det er alt for denne gang!