19Aug

Geek School: leren opmaken, filteren en vergelijken in PowerShell

click fraud protection

In deze editie van Geek School kijken we naar het formatteren, filteren en vergelijken van objecten in de Pipeline.

Lees de vorige artikelen in de reeks:

  • Leer hoe u Windows automatiseert met PowerShell
  • Leren gebruik van cmdlets in PowerShell
  • Leren hoe u objecten in PowerShell

kunt gebruiken En houd de rest van de serie de hele week op de hoogte.

Standaardopmaak

Toen ik voor het eerst met PowerShell begon, dacht ik dat alles magisch was, maar de waarheid is dat het slechts een beetje tijd kost om te begrijpen wat er zich onder de kap afspeelt. Hetzelfde geldt voor het PowerShell-formatteersysteem. Als u de cmdlet Get-Service uitvoert, geeft de gegenereerde uitvoer slechts 3 eigenschappen weer: status, naam en weergavenaam.

Maar als je Get-Service naar Get-Member leidt, zie je dat de ServiceController-objecten veel meer hebben dan alleen deze drie eigenschappen, dus wat is er aan de hand?

Het antwoord ligt in een verborgen bestand dat bepaalt hoe de meeste ingebouwde cmdlets hun uitvoer weergeven. Om begrip te krijgen, typt u het volgende in de shell en drukt u op Enter.

instagram viewer

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

Als we de Find-functie gebruiken, kunnen we snel doorgaan naar de sectie die de uitvoer van de Get-Service cmdlet beschrijft door te zoeken naar de ServiceControllertype.

Plotseling ziet u dat onder de motorkap PowerShell alle objecten in de Pipeline van het type ServiceController opmaakt en een tabel met drie kolommen maakt: Status, Naam en DisplayName. Maar wat als het type waar u mee te maken hebt, geen vermelding heeft in dat bestand of een ander bestandsformaat? Welnu, het is eigenlijk best simpel. Als het object uit de pipeline 5 of meer eigenschappen heeft, geeft PowerShell alle eigenschappen van het object in een lijst weer;als het minder dan 5 eigenschappen heeft, worden deze in een tabel weergegeven.

Uw gegevens opmaken

Als u niet tevreden bent met de standaardopmaak van een object of type, kunt u uw eigen opmaak rollen. Er zijn drie cmdlets die u moet kennen om dit te doen.

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

Format-Wide neemt eenvoudigweg een verzameling van objecten en toont een enkele eigenschap van elk object. Standaard zal het zoeken naar een eigenschap name;Als uw objecten geen naamseigenschap bevatten, gebruikt deze de eerste eigenschap van het object nadat de eigenschappen alfabetisch zijn gesorteerd.

Get-Service |Format-Wide

Zoals je kunt zien, is het standaard ook twee kolommen, hoewel je zowel kunt specificeren welke eigenschap je wilt gebruiken, als hoeveel kolommen je wilt weergeven.

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

Als iets standaard is opgemaakt als een tabel, kunt u het altijd naar de lijstweergave schakelen met behulp van de Format-List-cmdlet. Laten we eens kijken naar de uitvoer van de cmdlet Get-Process.

Deze tabelweergave past eigenlijk heel goed bij dit soort informatie, maar laten we doen alsof we het in lijstvorm willen bekijken. Het enige dat we moeten doen, is het naar Format-List sturen.

Get-Process |Formaatlijst

Zoals u kunt zien, staan ​​er standaard maar vier items in de lijst. Om alle eigenschappen van het object te bekijken, kunt u een jokerteken gebruiken.

Get-Process |Opmaaklijst -eigenschap *

U kunt ook alleen de gewenste eigenschappen selecteren.

Get-Process |Opmaak-lijst -Property naam, ID

Opmaak-tabel, aan de andere kant, neemt gegevens en verandert het in een tabel. Omdat onze gegevens van Get-Process al in de vorm van een tabel zijn, kunnen we deze gebruiken om gemakkelijk eigenschappen te kiezen die we in de tabel willen weergeven. Ik heb de AutoSize-parameter gebruikt om alle gegevens op één scherm te laten passen.

Get-Process |Opmaak-tabelnaam, id -AutoSize

Filteren en vergelijken

Een van de beste dingen over het gebruik van een op objecten gebaseerde pipeline is dat u objecten uit de pijplijn kunt filteren in elk stadium met de Where-Object-cmdlet.

Get-Service |Where-Object{ $ _. Status -eq "Running"}

Gebruik waar het object eigenlijk heel eenvoudig is.$ _ staat voor het huidige pijplijnobject, waaruit u een eigenschap kunt kiezen waarop u wilt filteren. Hier worden alleen objecten bewaard waarvan de Status-eigenschap gelijk is aan Running. Er zijn een paar vergelijkingsoperatoren die u kunt gebruiken in het filterende scriptblok:

  • eq( gelijk aan)
  • neq( niet gelijk aan)
  • gt( groter dan)
  • ge( groter dan of gelijk aan)
  • lt( minder dan)
  • le( Kleiner dan of gelijk aan)
  • -achtig( Wildcard-reeksovereenkomst)

Een volledige lijst en meer informatie kan worden bekeken in het conceptuele hulpbestand van about_comparison, maar het kost enige tijd om te wennen aan de Where-Obeject-syntaxis. Dat is alles voor deze tijd!