Geek School Learning Formatering, filtrering och jämförelse i PowerShell
I denna utgåva av Geek School tittar vi på att formatera, filtrera och jämföra objekt i pipeln.
Var noga med att läsa de föregående artiklarna i serien:
- Lär dig hur du automatiserar Windows med PowerShell
- Att lära sig använda Cmdlets i PowerShell
- Lär dig hur man 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, visar det genererade resultatet bara 3 egenskaper: Status, Namn och DisplayName.
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 cmdlets 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 Sök-funktion kan vi snabbt hoppa över det avsnitt som beskriver utmatningen från Get-Service-cmdlet genom att söka efter ServiceController-typen.
Plötsligt kan du se att under kåpan PowerShell formaterar objekt i pipelinen 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 dina data
Om du inte är nöjd med standardformatet för 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-List
- Format-tabell
- Format-Wide
Format-Wide tar helt enkelt en samling objekt och visar en enda 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, är det också standard 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 är formaterat 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 röra den till Format-List.
Get-Process | Format-List
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-tabell, å 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-tabell namn, 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 objekt är faktiskt 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 filtreringsskriptet:
- eq (lika med)
- neq (inte lika med)
- 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 den konceptuella hjälpfilen about_comparison, men det tar lite tid att vänja sig vid Syntaxen där-Obeject. Det är allt för den här tiden!