PowerShell Get-Content een PowerShell Tail Equivalent

Met automatisering is het lezen van gegevens uit een tekstbestand een veelvoorkomend scenario. De meeste programmeertalen hebben minstens één manier om tekstbestanden te lezen, en PowerShell is geen uitzondering. De PowerShell `Get-Content` cmdlet, een equivalent van de PowerShell tail, leest de inhoud van een tekstbestand en importeert de gegevens in een PowerShell-sessie.

De PowerShell `Get-Content` cmdlet is een onmisbaar hulpmiddel wanneer je tekstbestanden als invoer voor je script moet gebruiken. Misschien moet je PowerShell-script een computermachtiging lezen om te controleren of een e-mailsjabloon importeren om naar je gebruikers te sturen. PowerShell `Get-Content` ondersteunt deze scenario’s gemakkelijk!

Wat dacht je van het volgen van een logbestand in realtime? Ja, de PowerShell `Get-Content` kan dat ook!. Blijf dit artikel lezen, en je leert hoe je de `Get-Content` cmdlet kunt gebruiken om tekstbestanden in PowerShell te lezen.

Vereisten

Als je geïnteresseerd bent in het volgen van de voorbeelden in deze tutorial, heb je de volgende vereisten nodig.

  • Je hebt een computer nodig die draait op Windows 10. Deze tutorial gebruikt Windows 10 versie 20H2. Maar maak je geen zorgen, je zult het wel redden met de Windows 10-versie die je hebt.
  • Je moet minstens Windows PowerShell 5.1 hebben, of PowerShell 7.1 geïnstalleerd hebben op je computer. Hier wordt PowerShell 7.1 gebruikt, maar elke versie zal werken!
  • Je zult commando’s schrijven en testen, dus je hebt een code-editor nodig. De aanbevolen editors zijn Windows PowerShell ISE, ingebouwd in Windows, en Visual Studio Code (VSCode). Dit artikel maakt gebruik van VSCode.
  • Het zal ook helpen als je een werkmap op je computer maakt. De werkmap kan overal zijn waar je maar wilt. Merk echter op dat de voorbeelden in deze tutorial zich bevinden in de C:\demo map.
  • Om te beginnen heb je wat inhoud nodig! Maak een bestand aan, in je werkmap, met de naam fruits.txt dat tien verschillende fruitsoorten bevat voor eenvoud. Je zult dit tekstbestand gebruiken in alle voorbeelden.
cherry
 berry
 apricot
 papaya
 raspberry
 melon
 peach
 tangerine
 cantaloupe
 orange

Weet je niet welke versie van PowerShell je hebt? Bezoek het artikel Hoe controleer je je PowerShell-versie (Alle manieren!).

Het lezen van een tekstbestand en het resultaat teruggeven als een string array

De Get-Content cmdlet leest de inhoud uit een bestand en retourneert standaard elke regel van een tekstbestand als een string object. Als gevolg daarvan wordt de verzameling PowerShell-objecten een array van string-objecten.

De onderstaande code leest de inhoud van het fruits.txt bestand en geeft het resultaat weer op de PowerShell-console zoals te zien is in de onderstaande schermafbeelding.

Get-Content .\fruits.txt
Retrieving the text file content using PowerShell Get-Content.

Get-Content leest en slaat de inhoud op als een array, maar hoe weet je dat zeker? Sla eerst de inhoud op naar een PowerShell-object dat je vervolgens kunt onderzoeken om het type te bepalen.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

Bekijk de onderstaande schermafbeelding, de variabele $fruits is een array die tien objecten bevat. Elk object vertegenwoordigt een enkele regel tekst.

Confirming that the text file content is stored as an array.

Een Specifieke Regel Uit een Tekstbestand Teruggeven

In het vorige voorbeeld heb je geleerd dat het standaard resultaat van Get-Content een array of een collectie van objecten is. Elk item in een collectie komt overeen met een indexnummer, en PowerShell-indexen beginnen typisch bij nul.

De onderstaande schermafbeelding toont dat er tien items in de string-array zijn. De array heeft de tien items geïndexeerd van nul tot negen.

Showing that the indexed items in the string array start at zero index.

Om alleen de vijfde regel inhoud weer te geven, moet je het indexnummer 4 specificeren, tussen vierkante haken (bekend als array-notatie).

(Get-Content .\fruits.txt)[4]

Je kunt opmerken dat de Get-Content-opdracht tussen haakjes staat. Deze notatie vertelt PowerShell om de opdracht tussen de haakjes eerst uit te voeren voordat andere bewerkingen worden uitgevoerd.

In de onderstaande schermafbeelding zie je dat het enige geretourneerde resultaat raspberry is, wat het item op index 4 is en overeenkomt met de vijfde regel in het tekstbestand.

Returning a specific line from Get-Content results.

Wat als je de inhoud in de laatste regel wilt krijgen? Gelukkig hoef je het totale aantal regels niet te weten. Gebruik in plaats daarvan [-1] als het indexnummer, en Get-Content zal alleen de laatste regel van het bestand weergeven.

(Get-Content .\fruits.txt)[-1]

Het Aantal Teruggegeven Topresultaten Beperken door Get-Content

Gebruik de TotalCount-parameter van Get-Content om een specifiek aantal regels uit een tekstbestand op te halen. De TotalCount-parameter accepteert een long-waarde, wat betekent dat het een maximale waarde van 9.223.372.036.854.775.807 is.

Bijvoorbeeld, de onderstaande opdracht leest de inhoud en beperkt het resultaat tot drie items.

Get-Content .\fruits.txt -TotalCount 3

Zoals je zou verwachten, toont het resultaat hieronder alleen de bovenste drie regels vanaf het begin van het tekstbestand.

Reading the top three results using the Get-Content command and the TotalCount parameter.

Gebruik de PowerShell Tail-parameter om resultaten vanaf het einde van een bestand terug te krijgen

In het vorige voorbeeld gebruikte je de PowerShell Get-Content-cmdlet om een tekstbestand te lezen en de topresultaten te beperken. Het is ook mogelijk om het tegenovergestelde te bereiken met PowerShell Get-Content. Gebruik de PowerShell Tail-parameter om een specifiek aantal regels vanaf het einde van een bestand te lezen.

Het onderstaande voorbeeldcode leest het tekstbestand en toont de inhoud van de onderste vier regels.

Get-Content .\fruits.txt -Tail 4

Na het uitvoeren van de PowerShell tail-opdracht zal het verwachte resultaat beperkt zijn tot de laatste vier regels van de inhoud, zoals getoond in de onderstaande afbeelding.

Getting the results from the end of a file using the Get-Content Tail parameter.

De Tail-parameter wordt vaak samen gebruikt met de Wait-parameter. Het gebruik van de Wait-parameter houdt het bestand open en controleert elke seconde op nieuwe inhoud. De onderstaande demonstratie toont de Tail– en Wait-parameters in actie. Om Wait te verlaten, gebruik de toetscombinatie CTRL+C.

Get-Content -Path .\fruits.txt -Tail 1 -Wait
Using the wait and Tail parameters with Get-Content.

Het teruggeven van de resultaten als een enkele string

Je hebt misschien gemerkt dat je in eerdere voorbeelden te maken had met stringarrays als de uitvoer van PowerShell’s Get-Content. En zoals je tot nu toe hebt geleerd, stelt de aard van arrays je in staat om op de inhoud één item per keer te werken.

Arrays werken vaak goed, maar het kan moeilijker zijn om strings te vervangen. De Raw-parameter van Get-Content leest de volledige inhoud van een bestand in als een enkel stringobject. Hoewel de code hieronder hetzelfde is als die gebruikt in het eerste voorbeeld, slaat de Raw-parameter de bestandsinhoud op als een enkele string.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt -Raw
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

De onderstaande schermafbeelding toont aan dat het toevoegen van de Raw-parameter aan Get-Content resulteert in het behandelen van de inhoud als een enkele string en niet als een array van objecten.

Confirming that the Raw parameter of Get-Content reads the file content as a single string object.

Zodra je de inhoud van een bestand in een enkele string hebt met behulp van de Raw-parameter, wat kun je er dan mee doen? Misschien moet je een string vinden en vervangen in de inhoud van dat bestand. In het onderstaande voorbeeld leest Get-Content de inhoud van een bestand als een enkele string. Vervolgens wordt met behulp van de replace-operator een specifiek woord vervangen door een ander.

Gerelateerd: Strings vinden en vervangen

# Krijg de ruwe inhoud van het tekstbestand
$fruits = Get-Content .\fruits.txt -Raw
# Toon de inhoud
$fruits
# Vind en vervang het woord 'abrikoos' door 'mango'
$fruits -replace 'apricot','mango'
Reading the content of a text file as a single string and replacing a word using the replace operator.

Lees alleen inhoud uit bestanden die overeenkomen met een filter

Heb je een map vol met bestanden, maar moet je alleen de inhoud van een paar specifieke lezen? Met PowerShell Get-Content, hoef je de bestanden niet apart te filteren voordat je de inhoud leest. De Filter-parameter van Get-Content beperkt welke bestanden de cmdlet leest.

Om te demonstreren hoe je alleen de inhoud van specifieke bestanden leest, maak eerst een paar bestanden om te lezen. Zoals hieronder getoond, maak de bestanden in je werkmap met behulp van Add-Content.

# Add-Content maakt het log1.log- en log2.log-bestand aan als ze nog niet bestaan en voegt de opgegeven waarde toe
Add-Content -Value "This is the content in Log1.log" -Path C:\demo\Log1.log
Add-Content -Value "This is the content in Log2.log" -Path C:\demo\Log2.log
# Controleer of de bestanden zijn aangemaakt
Get-ChildItem C:\demo
Creating test .log files using Add-Content.

Met je testbestanden gemaakt, gebruik de Filter– en Path-parameters om alleen .log-bestanden in de hoofdmap te lezen. Het gebruikte asterisk in de filterdefinitie geeft aan Get-Content om elk bestand met de extensie .log te lezen. Het eindasterisk van de padparameter beperkt het lezen van bestanden tot alleen de hoofdmap.

Get-Content -Path C:\demo* -Filter *.log

Zoals te zien is in de onderstaande output, wordt alleen de inhoud van de .log-bestanden weergegeven.

Using the Filter parameter with PowerShell Get-Content to limit the read files.

Gerelateerd: Get-ChildItem: Bestanden, Register, Certificaten en Meer als Eén Lijst

Het lezen van de Alternatieve Gegevensstroom van een Bestand

Tot nu toe heb je uitsluitend met tekstbestanden gewerkt, maar Get-Content kan gegevens lezen van de alternatieve gegevensstroom (ADS) van een bestand. Voel je vrij om meer te lezen over streams, maar je kunt een stream zien als een andere gegevensattribuut dat naast de typische bestandsinhoud wordt opgeslagen.

Alternatieve gegevensstromen zijn een kenmerk van het Windows NTFS-bestandssysteem, daarom is dit niet van toepassing op Get-Content wanneer het wordt gebruikt met niet-Windows besturingssystemen.

Je kunt alternatieve gegevensstromen zien door Get-Item uit te voeren met de Stream-parameter. Bij het verwijzen naar een bestand met behulp van de Stream-parameter, retourneert Get-Item een eigenschap genaamd Stream zoals hieronder weergegeven. Deze standaard bestandsinhoudsstroom wordt weergegeven met :$DATA.

Om de standaard :$DATA stroom te demonstreren, gebruik de Get-Item cmdlet om alle beschikbare streams in het bestand fruits.txt weer te geven. Zoals hieronder getoond, toont Get-Item een enkele stream.

Get-Item -Path .\fruits.txt -Stream *
Listing all available streams in a file using Get-Item.

De Stream-parameter van Get-Content leest expliciet de inhoud van de standaard :$DATA stroom zoals hieronder weergegeven. De teruggegeven inhoud is hetzelfde als de standaarduitvoer van Get-Content, omdat de :$DATA stroom standaard wordt gelezen.

Get-Content -Path .\fruits.txt -Stream ':$DATA'
Explicitly reading the :$DATA stream using Get-Content.

Om het ophalen van een alternatieve gegevensstroom te demonstreren met Get-Content, wijzig een bestand met Add-Content om de nieuwe stroom toe te voegen. Gebruik Get-Item om de nieuwe stroom naast de standaard :$DATA stroom te tonen, zoals te zien is in het onderstaande voorbeeld.

# Voeg een nieuwe ADS genaamd Secret toe aan het bestand fruits.txt
Add-Content -Path .\fruits.txt -Stream Secret -Value 'This is a secret. No one should find this.'
Get-Item -Path .\fruits.txt -Stream *
Adding the Secret alternate data stream using Add-Content and displaying the new stream with Get-Item.

Omdat alleen de :$DATA stroom standaard wordt gelezen, gebruik de Stream-parameter van Get-Content om de nieuwe Secret-stroominhoud op te halen. Zoals hieronder getoond, wordt de inhoud van de Secret-stroom weergegeven in plaats van de standaard bestandsinhoud.

Get-Content -Path .\fruits.txt -Stream secret
Using Get-Content to read the Secret alternate data stream content.

Volgende stappen met PowerShell Get-Content

In dit artikel heb je veel manieren geleerd om Get-Content te gebruiken om inhoud te lezen en te manipuleren. Je hebt zelfs geleerd dat Get-Content flexibel genoeg is om inhoud te lezen uit alternatieve gegevensstromen!

Met wat je in dit artikel hebt geleerd, op welke andere manieren kun je Get-Content gebruiken in je werk? Misschien kun je Get-Content gebruiken om te bepalen of een back-upbestand verouderd is en automatisch een oproep doen om een back-uptaak uit te voeren?

Source:
https://adamtheautomator.com/powershell-get-content/