19Aug

Geek School: Learning Formatering, filtrering och jämförelse i PowerShell

I den här upplagan av Geek School ser vi på att formatera, filtrera och jämföra objekt i pipeln.

Var noga med att läsa tidigare artiklar i serien:

  • Lär dig hur du automatiserar Windows med PowerShell
  • Lär dig använda Cmdlets i PowerShell
  • Lär dig hur du använder objekt i PowerShell

Och håll dig uppdaterad för resten av serien hela veckan.

Standardformatering

När jag först började med PowerShell trodde jag att allt var magiskt, men sanningen är att det bara tar lite tid att förstå vad som händer under huven. Detsamma gäller för formateringssystemet PowerShell. Faktum är att om du kör cmdlet Get-Service, visas bara 3 egenskaper: Status, Namn och Displaynamn.

Men om du rör Get-Service till Get-Member ser du att ServiceController-objekten har mycket mer än bara dessa tre egenskaper, så vad händer?

Svaret ligger i en dold fil som definierar hur de flesta av de inbyggda cmdletsna visar sin produktion. För att få en förståelse, skriv följande i skalet och tryck på Enter.

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

Om vi ​​använder anteckningsblockets Find-funktion kan vi snabbt hoppa över det avsnitt som beskriver utmatningen från Get-Service cmdlet genom att söka efter ServiceControllertyp.

Plötsligt kan du se att under hooden formaterar PowerShell alla objekt i pipeln som är av typen ServiceController och skapar en tabell med tre kolumner: Status, Namn och DisplayName. Men vad händer om typen du hanterar inte har någon post i den filen eller någon annan formatfil för den delen? Nå då är det ganska enkelt faktiskt. Om objektet som kommer ut ur rörledningen har 5 eller fler egenskaper, visar PowerShell alla objektets egenskaper i en lista;Om den har mindre än 5 egenskaper, visar den dem i ett bord.

Formatering av data

Om du inte är nöjd med standardformateringen av ett objekt eller en typ kan du rulla din egen formatering. Det finns tre cmdlets du behöver veta för att göra detta.

  • Format-lista
  • Format-tabell
  • Format-Wide

Format-Wide tar enkelt en samling objekt och visar en enskild egenskap hos varje objekt. Som standard kommer det att leta efter en namnegenskap;Om dina objekt inte innehåller en namnegenskap kommer den att använda objektets första egenskap när egenskaperna har sorterats alfabetiskt.

Get-Service |Format-Wide

Som du kan se, standardiserar den också två kolumner, även om du kan ange både vilken egenskap du vill använda, liksom hur många kolumner du vill visas.

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

Om något formateras som en tabell som standard kan du alltid byta den till listvy med hjälp av cmdlet Format-lista. Låt oss ta en titt på utmatningen från Get-Process cmdlet.

Denna tabellvy passar faktiskt den här typen av information mycket bra, men låt oss låtsas att vi vill se den i listform. Allt vi verkligen behöver göra är att leda det till Format-List .

Get-Process |Format-lista

Som du kan se finns det bara fyra objekt som visas som standard i listan. För att visa alla objektets egenskaper kan du använda ett jokertecken.

Get-Process |Format-List -Property *

Alternativt kan du bara välja de egenskaper du vill ha.

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

Format-Table, å andra sidan tar data och gör det till ett bord. Eftersom våra data från Get-Process redan finns i form av ett bord, kan vi använda det för att enkelt välja egenskaper som vi vill visa i tabellen. Jag använde parametern AutoSize för att göra alla data passande på en enda skärm.

Get-Process |Format-tabellnamn, id -AutoSize

Filtrering och jämförelse

En av de bästa sakerna med att använda en objektbaserad pipeline är att du kan filtrera objekt ur rörledningen vid något tillfälle med hjälp av cmdlet där objektet är objekt.

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

Använda var objektet är väldigt enkelt.$ _ representerar det aktuella pipelineobjektet, från vilket du kan välja en egenskap som du vill filtrera på.Här behåller endast objekt där Status-egenskapen är lika med Running. Det finns några jämförelseoperatörer som du kan använda i filtreringsskriptblocket:

  • eq( Equal To)
  • neq( Inte lika)
  • gt( större än)
  • ge( större än eller lika med)
  • lt( mindre än)
  • le( mindre än eller lika med)
  • som( Wildcard String Match)

En fullständig lista och mer information kan ses i omkonjunkturens konceptuella hjälpfil, men det tar lite tid att vänja sig vid Synkronisera Where-Obeject. Det är allt för den här tiden!