Mit Automatisierung ist das Lesen von Daten aus einer Textdatei ein häufiges Szenario. Die meisten Programmiersprachen haben mindestens eine Möglichkeit, Textdateien zu lesen, und PowerShell bildet da keine Ausnahme. Das PowerShell-Get-Content
-Cmdlet, das einem PowerShell-Äquivalent für den Befehl „tail“ entspricht, liest den Inhalt einer Textdatei und importiert die Daten in eine PowerShell-Sitzung.
Das PowerShell-Get-Content
-Cmdlet ist ein unverzichtbares Werkzeug, wenn Sie Textdateien als Eingabe für Ihr Skript verwenden müssen. Vielleicht muss Ihr PowerShell-Skript eine Computerliste zum Überwachen lesen oder eine E-Mail-Vorlage importieren, um an Ihre Benutzer zu senden. PowerShell Get-Content
unterstützt diese Szenarien problemlos!
Wie wäre es, einer Protokolldatei in Echtzeit zu folgen? Ja, das PowerShell Get-Content
kann das auch! Lesen Sie diesen Artikel weiter, und Sie erfahren, wie Sie das Get-Content
-Cmdlet verwenden, um Textdateien in PowerShell zu lesen.
Voraussetzungen
Wenn Sie daran interessiert sind, die Beispiele in diesem Tutorial zu verfolgen, benötigen Sie die folgenden Voraussetzungen.
- Sie benötigen einen Computer, der unter Windows 10 läuft. Dieses Tutorial verwendet Windows 10 Version 20H2. Aber keine Sorge, Sie werden auch mit der Windows 10-Version, die Sie haben, in Ordnung sein.
- Sie sollten mindestens Windows PowerShell 5.1 oder PowerShell 7.1 auf Ihrem Computer installiert haben. Hier wird PowerShell 7.1 verwendet, aber jede Version wird funktionieren!
- Sie werden Befehle schreiben und testen, daher benötigen Sie einen Code-Editor. Die empfohlenen Editoren sind Windows PowerShell ISE, der in Windows integriert ist, und Visual Studio Code (VSCode). Dieser Artikel verwendet VSCode.
- Es wird auch helfen, wenn Sie ein Arbeitsverzeichnis auf Ihrem Computer erstellen. Der Arbeitsordner kann überall sein, wo Sie möchten. Sie werden jedoch feststellen, dass die Beispiele in diesem Tutorial im C:\demo-Ordner liegen.
- Um loszulegen, benötigen Sie etwas Inhalt! Erstellen Sie eine Datei in Ihrem Arbeitsverzeichnis mit dem Namen fruits.txt, die aus zehn verschiedenen Früchten zur Vereinfachung besteht. Sie werden diese Textdatei in allen Beispielen verwenden.
Wissen Sie nicht, welche PowerShell-Version Sie haben? Besuchen Sie den Artikel So überprüfen Sie Ihre PowerShell-Version (Alle Möglichkeiten!).
Lesen einer Textdatei und Rückgabe des Ergebnisses als Zeichenfolgenarray
Das Get-Content
-Cmdlet liest den Inhalt einer Datei und gibt standardmäßig jede Zeile einer Textdatei als Zeichenfolgenobjekt zurück. Als Ergebnis wird die Sammlung von PowerShell-Objekten zu einem Array von Zeichenfolgenobjekten.
Der folgende Code liest den Inhalt der Datei fruits.txt und zeigt das Ergebnis in der PowerShell-Konsole an, wie im folgenden Screenshot zu sehen.

Get-Content
.Get-Content
liest und speichert den Inhalt als Array, aber wie wissen Sie das sicher? Speichern Sie zunächst den Inhalt in einem PowerShell-Objekt, das Sie dann untersuchen können, um den Typ zu bestimmen.
Schau dir den untenstehenden Screenshot an. Die Variable $fruits
ist ein Array, das zehn Objekte enthält. Jedes Objekt repräsentiert eine einzelne Textzeile.

Ausgabe einer bestimmten Zeile aus einer Textdatei
Im vorherigen Beispiel hast du gelernt, dass das Standardergebnis von Get-Content
ein Array oder eine Sammlung von Objekten ist. Jeder Eintrag in einer Sammlung entspricht einer Indexnummer, und PowerShell-Indizes starten in der Regel bei null.
Der Screenshot unten zeigt, dass es zehn Elemente im Zeichenkettenarray gibt. Das Array indexiert die zehn Elemente von null bis neun.

Um nur die fünfte Inhaltszeile anzuzeigen, musst du die Indexnummer 4
angeben, eingeschlossen in eckigen Klammern (bekannt als Array-Notation).
Vielleicht fällt dir auf, dass der Befehl
Get-Content
in Klammern eingeschlossen ist. Diese Notation sagt PowerShell, den Befehl in den Klammern zuerst auszuführen, bevor andere Operationen durchgeführt werden.
Im untenstehenden Screenshot siehst du, dass das einzige zurückgegebene Ergebnis raspberry
ist, das Element am Index 4
und der fünften Zeile in der Textdatei entspricht.

Get-Content
results.Was ist, wenn du den Inhalt in der letzten Zeile benötigst? Glücklicherweise musst du die Gesamtanzahl der Zeilen nicht wissen. Verwende stattdessen [-1]
als Index, und Get-Content
zeigt nur die letzte Zeile der Datei an.
Begrenzung der Anzahl der zurückgegebenen Top-Ergebnisse durch Get-Content
Verwenden Sie das TotalCount
-Parameter von Get-Content
, um eine bestimmte Anzahl von Zeilen aus einer Textdatei abzurufen. Der TotalCount
-Parameter akzeptiert einen long-Wert, was einen maximalen Wert von 9.223.372.036.854.775.807 bedeutet.
Zum Beispiel liest der folgende Befehl den Inhalt und beschränkt das Ergebnis auf drei Elemente.
Wie erwartet zeigt das Ergebnis unten nur die ersten drei Zeilen vom Anfang der Textdatei an.

Get-Content
command and the TotalCount
parameter.Verwenden Sie den PowerShell-Tail-Parameter, um Ergebnisse vom Ende einer Datei zurückzugeben.
In dem vorherigen Beispiel haben Sie das PowerShell Get-Content
-Cmdlet verwendet, um eine Textdatei zu lesen und die Top-Ergebnisse zu beschränken. Es ist auch möglich, das Gegenteil mit PowerShell Get-Content
zu erreichen. Verwenden Sie den PowerShell Tail
-Parameter, um eine bestimmte Anzahl von Zeilen vom Ende einer Datei zu lesen.
Der folgende Beispielcode liest die Textdatei und zeigt den Inhalt der unteren vier Zeilen an.
Nach Ausführung des PowerShell tail
-Befehls wird das erwartete Ergebnis auf die letzten vier Zeilen des Inhalts beschränkt, wie im Bild unten gezeigt.

Get-Content
Tail
parameter.Der Tail
-Parameter wird oft zusammen mit dem Wait
-Parameter verwendet. Die Verwendung des Wait
-Parameters hält die Datei offen und überprüft einmal pro Sekunde auf neuen Inhalt. Die nachstehende Demonstration zeigt die Tail
– und Wait
-Parameter in Aktion. Um Wait
zu beenden, verwenden Sie die Tastenkombination STRG+C
.

wait
and Tail
parameters with Get-Content
.Die Ergebnisse als einzelnen String zurückgeben
Es ist Ihnen vielleicht aufgefallen, dass Sie in früheren Beispielen mit Zeichenfolgenarrays als Ausgabe von PowerShell Get-Content
gearbeitet haben. Und wie Sie bisher gelernt haben, ermöglicht Ihnen die Natur von Arrays, auf den Inhalt einzeln zuzugreifen.
Arrays funktionieren oft gut, können jedoch das Ersetzen von Zeichenfolgen erschweren. Der Raw
-Parameter von Get-Content
liest den gesamten Inhalt einer Datei in ein einzelnes Zeichenfolgenobjekt ein. Obwohl der folgende Code derselbe ist wie im ersten Beispiel verwendet, speichert der Raw
-Parameter den Dateiinhalt als einzelne Zeichenfolge.
Der Screenshot unten zeigt, dass das Hinzufügen des Raw
-Parameters zu Get-Content
dazu führt, dass der Inhalt als einzelne Zeichenfolge und nicht als Array von Objekten behandelt wird.

Raw
parameter of Get-Content
reads the file content as a single string object.Sobald Sie den Inhalt einer Datei mit dem Raw
-Parameter in einer einzelnen Zeichenfolge haben, was können Sie damit machen? Vielleicht müssen Sie eine Zeichenfolge in diesem Dateiinhalt finden und ersetzen. Im folgenden Beispiel liest Get-Content
den Inhalt einer Datei als einzelne Zeichenfolge. Dann wird mit dem replace
-Operator ein bestimmtes Wort durch ein anderes ersetzt.
Verwandt: Zeichenfolgen finden und ersetzen

replace
operator.Lesen Sie nur den Inhalt von Dateien, die einem Filter entsprechen
Haben Sie einen Ordner voller Dateien, aber müssen den Inhalt nur einiger weniger lesen? Mit PowerShell Get-Content
müssen Sie die Dateien nicht separat filtern, bevor Sie den Inhalt lesen. Der Filter
-Parameter von Get-Content
beschränkt, welche Dateien das Cmdlet liest.
Um zu demonstrieren, wie man nur den Inhalt bestimmter Dateien liest, erstellen Sie zunächst ein paar Dateien, die Sie lesen möchten. Wie unten gezeigt, erstellen Sie die Dateien in Ihrem Arbeitsordner mit Add-Content
.

.log
files using Add-Content
.Mit Ihren Testdateien verwenden Sie die Parameter Filter
und Pfad
, um nur .log
-Dateien im Stammverzeichnis zu lesen. Das Sternchen in der Filterdefinition gibt Get-Content
an, dass jede Datei mit .log
am Ende gelesen werden soll. Das endende Sternchen des Pfadparameters beschränkt das Lesen von Dateien nur auf das Stammverzeichnis.
Wie im unten stehenden Ausgabebereich gezeigt, wird nur der Inhalt der .log
-Dateien angezeigt.

Filter
parameter with PowerShell Get-Content
to limit the read files.Verwandt: Get-ChildItem: Dateien, Registry, Zertifikate und mehr als eine auflisten
Lesen des alternativen Datenstroms einer Datei
Bisher haben Sie ausschließlich mit Textdateien gearbeitet, aber Get-Content
kann Daten aus dem alternativen Datenstrom (ADS) einer Datei lesen. Fühlen Sie sich frei, mehr über Streams zu lesen, aber Sie können sich einen Stream als ein weiteres Datenattribut vorstellen, das neben dem üblichen Dateiinhalt gespeichert wird.
Alternative Datenströme sind ein Merkmal des Windows NTFS-Dateisystems, daher gilt dies nicht für
Get-Content
, wenn es mit nicht-Windows-Betriebssystemen verwendet wird.
Sie können alternative Datenströme sehen, indem Sie Get-Item
mit dem Stream
-Parameter ausführen. Wenn Sie eine Datei mit dem Stream
-Parameter referenzieren, gibt Get-Item
eine Eigenschaft namens Stream
zurück, wie unten dargestellt. Dieser Standarddateiinhalt wird mit :$DATA
dargestellt.
Um den Standard-:$DATA
-Stream zu demonstrieren, verwenden Sie das Get-Item
-Cmdlet, um alle verfügbaren Streams in der Datei fruits.txt anzuzeigen. Wie unten gezeigt, zeigt Get-Item
einen einzigen Stream an.

Get-Item
.Der Stream
-Parameter von Get-Content
liest explizit den Inhalt des Standard-:$DATA
-Streams, wie unten gezeigt. Der zurückgegebene Inhalt ist derselbe wie der Standardausgabewert von Get-Content
, da der :$DATA
-Stream standardmäßig gelesen wird.

:$DATA
stream using Get-Content
.Um einen alternativen Datenstrom mithilfe von `Get-Content` abzurufen, modifizieren Sie eine Datei mit `Add-Content`, um den neuen Datenstrom hinzuzufügen. Verwenden Sie `Get-Item`, um den neuen Datenstrom neben dem Standarddatenstrom `:$DATA` anzuzeigen, wie im folgenden Beispiel.

Da standardmäßig nur der `:$DATA`-Datenstrom gelesen wird, verwenden Sie den `Stream`-Parameter von `Get-Content`, um den Inhalt des neuen `Secret`-Datenstroms abzurufen. Wie unten gezeigt, wird der Inhalt des `Secret`-Datenstroms anstelle des Standarddateiinhalts angezeigt.

Get-Content
to read the Secret
alternate data stream content.Nächste Schritte mit PowerShell `Get-Content`
In diesem Artikel haben Sie viele Möglichkeiten kennengelernt, `Get-Content` zum Lesen und Manipulieren von Inhalten zu verwenden. Sie haben sogar gelernt, dass `Get-Content` flexibel genug ist, um Inhalte aus alternativen Datenströmen zu lesen!
Mit dem, was Sie in diesem Artikel gelernt haben, wie können Sie `Get-Content` sonst noch in Ihrer Arbeit verwenden? Vielleicht können Sie `Get-Content` verwenden, um festzustellen, ob eine Sicherungsdatei veraltet ist, und automatisch einen Aufruf zum Ausführen eines Sicherungsprozesses auslösen?
Source:
https://adamtheautomator.com/powershell-get-content/