Mit PowerShell-Cmdlets lernen Sie die Grundlagen: wie man Text aus Textdateien abruft und wie man Text in Textdateien findet.
Eine der häufigsten Aufgaben, die ein IT-Profi erledigen muss, ist entweder das Erstellen, Lesen oder Ändern von Textdateien in irgendeiner Weise. Textdateien werden in Tausenden von verschiedenen Formaten dargestellt, von einfachen TXT-Dateien über XML bis hin zu verschiedenen proprietären Formaten. Da Textdateien auf so viele verschiedene Arten strukturiert werden können, haben Anbieter die einfache Textdatei als Mittel zur Definition von Skripts, zum Speichern von Konfigurationswerten und SQL-Abfragen und vieles mehr übernommen. Der einzige strukturelle Unterschied zwischen einer TXT-Datei und einer SQL-Datei ist z. B. nur die Dateierweiterung. Der Inhalt ist einfach nur Text, der auf eine andere, vordefinierte Weise strukturiert ist.
PowerShell bietet viele verschiedene Möglichkeiten, alle diese Textdateitypen zu verwalten, aber in diesem Artikel werden wir uns an den allgemeinsten Ansatz halten: Wir werden uns auf das Lesen und den unstrukturierten Text konzentrieren. Das bedeutet, keine XML-Dateien, keine SQL-Abfragedateien, nicht einmal PowerShell-Skripts selbst. Wir konzentrieren uns auf zwei Themen:
- Wie man Text aus Textdateien abruft.
- Wie man Text in Textdateien findet.
Wie man Text aus Textdateien abruft
Eine der einfachsten Aufgaben ist das Abrufen des gesamten Textes aus einer vorhandenen Textdatei. Für die meisten Textdateien kann ein PowerShell-Skripter das Cmdlet „Get-Content“ verwenden. Das Cmdlet „Get-Content“ ist ein sehr beliebtes PowerShell-Cmdlet, das den gesamten Text aus einer Textdatei abruft, die durch den Path-Parameter angegeben wird.
Am einfachsten können Sie den Path-Parameter mit dem Dateipfad zu einer Textdatei als Argument an das Cmdlet „Get-Content“ übergeben. Nehmen wir an, ich habe eine Datei namens MyText.txt. In dieser Textdatei habe ich die drei unten gezeigten Zeilen und ich möchte den Inhalt von MyText.txt mit einem PowerShell-Skript abrufen.
Dazu kann ich Get-Content mit dem Parameter Path verwenden.
Sie sehen, dass das Ergebnis der gesamte Inhalt von MyText.txt ist. Was aber, wenn Sie nur eine bestimmte Zeilennummer sehen wollen? Standardmäßig liest Get-Content jede Zeile in einer Textdatei und erstellt als Ausgabe ein Array mit jeder Zeile des Textes als Element in diesem Array. Das bedeutet, dass ich leicht verschiedene Elemente in diesem Array auswählen kann, indem ich die Array-Indexnummer angebe. In diesem Fall ist die Array-Indexnummer gleich der Zeilennummer der Textdatei.
Im obigen Beispiel zeige ich Ihnen, dass das Ergebnis von Get-Content ein Typ von System.Array ist und dass ich durch die Verwendung von Indexnummern in Klammern auswählen kann, welche Zeilen ich auf meiner Konsole ausgeben möchte. Wenn Sie mit Arrays und deren Nummerierungsschema nicht vertraut sind, sollten Sie wissen, dass das erste Element in einem Array mit einer Null beginnt. Deshalb kann ich mit der Nummer eins die zweite Zeile und mit der Nummer zwei die dritte Zeile auswählen. Das ist wichtig, um sich daran zu erinnern.
Wie man Text in Textdateien findet
Wenn Sie herausgefunden haben, wie man den gesamten Text in Textdateien oder bestimmte Zeilennummern findet, ist eine weitere beliebte Aufgabe, bestimmten Text innerhalb der Dateien selbst zu finden. Es gibt verschiedene Möglichkeiten, dies zu tun, aber die einfachste ist die Verwendung des Cmdlets „Where-Object“. Das Cmdlet „Where-Object“ ist ein beliebtes Cmdlet, mit dem Sie verschiedene Informationen aus der Ausgabe anderer Cmdlets „herausfiltern“ können; in diesem Beispiel werden Informationen aus dem Cmdlet „Get-Content“ gefiltert.
Anhand unserer vorherigen Textdatei als Beispiel möchte ich sehen, ob diese Textdatei die Wörter „Textdatei“ zusammen in ihr enthält. Dazu verwende ich Where-Object.
Bei der Verwendung von Where-Object muss ich die Variable $_ verwenden. Dies ist eine spezielle Variable in PowerShell, die als Pipeline-Variable bekannt ist. In diesem Beispiel repräsentiert sie jede Zeile der Textdatei, wie sie von Get-Content kommt. Ich verwende dann den like-Operator und verwende Platzhalter, um zu sehen, ob die Zeichenfolge „text file“ in einer der Zeilen der Textdatei vorhanden ist. Es sieht so aus, als ob zwei Zeilen gefunden wurden, die mit der Zeichenfolge übereinstimmen.
Wenn Sie mehr über das Suchen von Text in Textdateien erfahren möchten, schlage ich vor, dass Sie sich mit den Vergleichsoperatoren von PowerShell beschäftigen. Mit dem Match-Operator zum Beispiel wird Regex verwendet, das viel leistungsfähiger ist als der Like-Operator und mit dem Sie so ziemlich jedes denkbare Muster in einer Textdatei finden können.