Hjemmeside » hvordan » Geek School Learning Formatering, filtrering og sammenligning i PowerShell

    Geek School Learning Formatering, filtrering og sammenligning i PowerShell

    I denne utgaven av Geek School ser vi på formatering, filtrering og sammenligning av objekter i rørledningen.

    Husk å lese de forrige artiklene i serien:

    • Lær hvordan du automatiserer Windows med PowerShell
    • Lære å bruke Cmdlets i PowerShell
    • Lære hvordan du bruker objekter i PowerShell

    Og hold deg innstilt for resten av serien hele uken.

    Standardformatering

    Da jeg først startet med PowerShell, trodde jeg alt var magisk, men sannheten er at det bare tar litt tid å forstå hva som skjer under hetten. Det samme gjelder for formateringssystemet PowerShell. Faktisk, hvis du kjører Get-Service-cmdlet, viser generert produksjon bare deg 3 egenskaper: Status, Navn og DisplayName.

    Men hvis du piper Get-Service til Get-Member, ser du at ServiceController-objektene har mye mer enn bare disse tre egenskapene, så hva skjer?

    Svaret ligger i en skjult fil som definerer hvordan de fleste av de innebygde cmdletene viser utdataene sine. For å få en forståelse, skriv inn følgende i skallet og trykk enter.

    notisblokk C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

    Hvis vi bruker notisblokkens finnfunksjon, kan vi raskt hoppe over til delen som beskriver utdataene fra Get-Service cmdlet ved å søke etter ServiceController-typen.

    Plutselig kan du se at under hetten PowerShell formaterer objekter i rørledningen som er av typen ServiceController og oppretter en tabell med tre kolonner: Status, Navn og DisplayName. Men hva om typen du har å gjøre med ikke har en oppføring i den filen eller en annen formatfil for den saks skyld? Vel, det er ganske enkelt faktisk. Hvis objektet som kommer ut av rørledningen har 5 eller flere egenskaper, viser PowerShell alle objektets egenskaper i en liste; hvis den har mindre enn 5 egenskaper, viser den dem i et bord.

    Formatering av dataene dine

    Hvis du ikke er fornøyd med standardformatering av et objekt eller en type, kan du rulle din egen formatering. Det er tre cmdlets du trenger å vite for å gjøre dette.

    • Format-List
    • Format-Table
    • Format-Wide

    Format-Wide tar bare en samling objekter og viser en enkelt egenskap for hver gjenstand. Som standard vil det se etter en navnegenskap; Hvis objektene dine ikke inneholder en navnegenskap, vil den bruke objektets første egenskap når egenskapene er sortert alfabetisk.

    Get-Service | Format-Wide

    Som du kan se, er det også standard to kolonner, selv om du kan angi både hvilken egenskap du vil bruke, samt hvor mange kolonner du vil bli vist.

    Get-Service | Format-Wide -Property DisplayName -Column 6

    Hvis noe er formatert som et bord som standard, kan du alltid bytte det til listevisning ved hjelp av cmdlet Format-liste. La oss se på utgangen av Get-Process cmdlet.

    Denne tabellvisningen passer egentlig godt til denne typen informasjon, men la oss late som vi vil vise den i listeliste. Alt vi virkelig trenger å gjøre er å rør det til Format-List.

    Get-Process | Format-List

    Som du kan se er det bare fire elementer som vises som standard i listen. For å vise alle egenskapene til objektet, kan du bruke et jokertegn.

    Get-Process | Format-List -Property *

    Alternativt kan du bare velge de egenskapene du vil ha.

    Get-Process | Format-List -Property navn, id

    Format-Table, på den annen side tar data og gjør det til et bord. Siden våre data fra Get-Process allerede er i form av et bord, kan vi bruke det til å enkelt velge egenskaper vi vil vise i tabellen. Jeg brukte parameteren AutoSize for å få alle dataene til å passe på en enkelt skjerm.

    Get-Process | Format-tabell navn, id -AutoSize

    Filtrering og sammenligning

    En av de beste tingene ved å bruke en objektbasert rørledning er at du kan filtrere objekter ut av rørledningen på et hvilket som helst tidspunkt ved å bruke cmdlet der hvor objektet er objekt.

    Get-Service | Hvor-objekt $ _. Status -eq "Kjører"

    Bruke hvor objektet er faktisk veldig enkelt. $ _ representerer det nåværende pipelineobjektet, hvorfra du kan velge en egenskap du vil filtrere på. Her er det bare å holde gjenstander der Status-egenskapen er lik Running. Det er noen sammenligningsoperatører du kan bruke i filtreringsskriptblokken:

    • eq (lik til)
    • neq (ikke lik til)
    • gt (større enn)
    • ge (større enn eller lik til)
    • lt (mindre enn)
    • le (mindre enn eller lik til)
    • som (Wildcard String Match)

    En fullstendig liste og mer informasjon kan sees i konjunkturhjelpfilen about_comparison, men det tar litt tid å bli vant til Syntaxen der det er feil. Det er alt for denne gangen!