Verwenden des Cmdlet \"Get-Content\"

Lesen einer Textdatei

Wofür können Sie das Cmdlet Get-Content einsetzen? Auf jeden Fall können Sie erst mal schnell den Inhalt einer Textdatei lesen und anzeigen. Der folgende Befehl beispielsweise zeigt den Inhalt der Datei "C:\Scripts\Test.txt" an:

Get-Content c:\scripts\test.txt

Und so sieht die Ausgabe aus:

Windows PowerShell

Wir haben nie behauptet, dass es spektakulär sei – nur, dass es praktisch ist.

Wie praktisch? Hier folgt ein einfaches, aber anschauliches Beispiel. Angenommen, Sie haben eine Textdatei ("C:\Scripts\Test.txt"), die die Namen von zwei oder mehr Computern enthält. Sie möchten mit Hilfe von WMI Informationen über das auf jedem dieser Computer installierte BIOS ermitteln. Dazu gehen Sie wie folgt vor:

Get-Content c:\scripts\test.txt | Foreach-Object {Get-Wmiobject -computername $_ win32_bios}

Angenommen, Sie listen in der Textdatei nur zwei Computer auf, dann erhalten Sie etwa die folgenden Informationen zurück:

SMBIOSBIOSVersion : 68DTT Ver. F.0D
Manufacturer      : Hewlett-Packard
Name              : EPP runtime BIOS - Version 1.1
SerialNumber      : CND60723S7
Version           : HP     - 22110520

SMBIOSBIOSVersion : A03
Manufacturer      : Dell Computer Corporation
Name              : Phoenix ROM BIOS PLUS Version 1.10 A03
SerialNumber      : HTVNX41
Version           : DELL   - 7

Gute Frage: Wie funktioniert dieser Befehl? Der erste Teil ist weitgehend selbsterklärend – wir wenden einfach Get-Content an, um den Inhalt der Textdatei zu lesen. Jetzt betrachten wir die zweite Hälfte des Befehls:

ForEach-Object {Get-Wmiobject -computername $_ win32_bios}

Hier übergeben wir den Inhalt der Textdatei (unsere Computernamen) dem Cmdlet ForEach-Object. Wie sich herausstellt, legt Get-Content für den zu ermittelnden Inhalt automatisch ein Feld an. Bei einer Textdatei wird jede Zeile der Datei zu einem Eintrag in diesem Feld. Das Cmdlet ForEach-Object nimmt einfach den Inhalt der Datei zeilenweise entgegen und ruft das Cmdlet Get-WmiObject auf, wobei es ihm wiederholt jeweils eine neue Zeile aus der Datei übergibt (unter Verwendung der Standardvariablen für Pipelines $_), bis alle Zeilen gelesen wurden. Anschließend stellt Get-Wmiobject eine Verbindung zu dem jeweiligen Computer her und ermittelt Informationen aus der Klasse "Win32_BIOS".

Verwirrend? Probieren Sie es selbst für Ihre Computer aus und beobachten Sie, was passiert.

Weil Get-Content automatisch ein Feld anlegt, das aus allen in der Datei enthaltenen Zeilen besteht, heißt das, dass Sie auch das Cmdlet Measure-Object anwenden können, um auf ganz einfache Weise die Zeilen in der Datei zu zählen – eine Aufgabe, die viele Menschen gerne regelmäßig erledigen:

Get-Content c:\scripts\test.txt | Measure-Object

Der obige Befehl gibt etwa die folgenden Daten zurück:

Count    : 124
Average  : 
Sum      : 
Maximum  : 
Minimum  : 
Property :

Interessante Frage: Was tun Sie, wenn Sie nur die ersten x Zeilen der Datei zurückgeben wollen? In diesem Fall fügen Sie einfach den Parameter –totalcount ein, gefolgt von der Anzahl der zurückzugebenden Zeilen. Der folgende Befehl gibt nur die ersten fünf Zeilen der Datei "Test.txt" zurück:

Get-Content c:\scripts\test.txt -totalcount 5

Um die letzten fünf Zeilen im Text zu erhalten, lesen Sie die Datei einfach mit Get-Content aus und lassen dann Select-Object die letzten fünf Einträge für Sie auswählen:

Get-Content c:\scripts\test.txt | Select-Object -last 5

Aliase für "Get-Content"

  • gc

  • type

  • cat