Geek School Learning Formatteren, filteren en vergelijken in PowerShell
In deze editie van Geek School kijken we naar het formatteren, filteren en vergelijken van objecten in de Pipeline.
Zorg ervoor dat u de vorige artikelen in de serie leest:
- Leer hoe u Windows kunt automatiseren met PowerShell
- Leren gebruik te maken van cmdlets in PowerShell
- Leren hoe objecten in PowerShell te gebruiken
En blijf op de hoogte voor de rest van de serie de hele week.
Standaard opmaak
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 onder de kap gebeurt. 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 u Get-Service naar Get-Member leidt, ziet u 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.
notepad C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Als we de Find-functie van Notepad gebruiken, kunnen we snel doorgaan naar de sectie die de uitvoer van de Get-Service cmdlet beschrijft door te zoeken naar het type ServiceController.
Plots zie je dat onder de motorkap PowerShell alle objecten in de Pipeline opmaakt die van het type ServiceController zijn en een tabel maken met drie kolommen: 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 eenvoudig een verzameling objecten en geeft een enkele eigenschap van elk object weer. Standaard zoekt het 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 in twee kolommen, hoewel je zowel kunt specificeren welke eigenschap je wilt gebruiken, als hoeveel kolommen je wilt laten zien.
Get-Service | Format-Wide -Property DisplayName -Column 6
Als iets standaard als een tabel is opgemaakt, kunt u het altijd naar de lijstweergave schakelen met behulp van de cmdlet Formaatlijst. 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 wat we moeten doen, is er naar toe pijpen Format-List.
Get-Process | Format-List
Zoals u kunt zien, worden standaard slechts vier items in de lijst weergegeven. Om alle eigenschappen van het object te bekijken, kunt u een jokerteken gebruiken.
Get-Process | Opmaaklijst -eigenschap *
Als alternatief kunt u alleen de gewenste eigenschappen selecteren.
Get-Process | Opmaaklijst - Objectnaam, id
Format-Table, aan de andere kant, neemt data 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 | Formaat-tabelnaam, id -AutoSize
Filteren en vergelijken
Een van de beste dingen over het gebruik van een op objecten gebaseerde pipeline is dat u objecten in elke fase uit de pijplijn kunt filteren met de Where-Object-cmdlet.
Get-Service | Where-Object $ _. Status -eq "Actief"
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)
- Het (minder dan)
- le (minder dan of gelijk aan)
- leuk (Wildcard String Match)
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!