19Aug

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ær å bruke Cmdlets i PowerShell
  • Lær 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 at 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 produksjonen bare bare 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 Find-funksjon, kan vi raskt hoppe over til avsnittet som beskriver utdataene fra Get-Service cmdlet ved å søke etter ServiceControllertype.

Plutselig kan du se at under hetten PowerShell formatterer objekter i rørledningen som er av typen ServiceController og lager et bord 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-Liste
  • Format-tabell
  • Format-Wide

Format-Wide tar bare en samling objekter og viser en enkelt egenskap for hvert objekt. 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 en tabell som standard, kan du alltid bytte den til listevisning ved å bruke cmdlet Format-liste. La oss se på utdataene fra Get-Process cmdlet.

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

Get-Process |Format-liste

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 velge bare de egenskapene du vil ha.

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

Format-Table, derimot, 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 med å bruke en objektbasert pipeline er at du kan filtrere objekter ut av rørledningen på et hvilket som helst tidspunkt ved hjelp av cmdlet der objektet er objekt.

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

Bruke hvor objektet egentlig er 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)
  • 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 ses i omkomponerende konseptuelle hjelpefil, men det tar litt tid å vant seg til Where-Obeject-syntaksen. Det er alt for denne gangen!