19Aug

Geek School: Learning Formatering, filtrering og sammenligning i PowerShell

click fraud protection

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ær at bruge Cmdlets i PowerShell
  • Lær at bruge objekter i PowerShell

Og hold øje med resten af ​​serien hele ugen.

Standardformatering

Da jeg først startede 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 blot disse tre egenskaber, så hvad sker 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.

instagram viewer

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 ServiceControllertype.

Pludselig kan du se, at under hooden formatter PowerShell 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 ret 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-Liste
  • Format-tabel
  • Format-Wide

Format-Wide tager simpelthen en samling objekter og viser en enkelt egenskab for hver objekt. Som standard vil det 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 egenskab du vil bruge, samt hvor mange kolonner du vil blive vist.

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

Hvis noget er formateret som et bord som standard, 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 meget 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-liste

Som du kan se er der kun fire elementer, der vises som standard 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 findes 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 pipeline på ethvert tidspunkt ved hjælp af cmdlet hvor objektet er.

Get-Service |Hvor-objekt{ $ _. Status -eq "Running"}

Brug hvor objekt er faktisk meget simpelt.$ _ repræsenterer det aktuelle pipelineobjekt, hvorfra du kan vælge en egenskab, du vil filtrere på.Her bevarer 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 lig med)
  • lt( mindre end)
  • le( Mindre end eller lige til)
  • som( Wildcard String Match)

En komplet liste og flere oplysninger kan ses i den konceptuelle help file om_comparison, men det tager lidt tid at vænne sig til Synkronisationen Hvor-Obejekt. Det er alt for denne gang!