muhmuh
Goto Top

Powershell: Select-String erzeugt nicht das gewünschte Ergebnis

Hallo Zusammen,

ich suche schon seit zwei Tagen, komme aber leider nicht auf die Lösung.

Ich würde gerne folgenden Befehl (bisher über Command-Line erzeugt):
type 30-07-17_LOG.txt | find /i "REPORT" >> REPORT_AUSWERT.log  

in mein PowerShell - Script übernehmen.
Hierfür habe ich Folgendes in mein Script eingefügt:
Select-String -path "30-07-17_LOG.txt" -pattern "REPORT" | Out-File REPORT_AUSWERT.txt  

Die Ausgabe mit dem Powershell-Befehl "Select-String" erzeugt aber leider nicht das gewünschte Ergebnis.

Ausgabe mit TYPE und FIND:
REPORT C:\DATA\DATA 1\DATA 2\REPORT.RPT

Ausgabe mit SELECT-STRING...:
REPORT C:\DATA\DATA
 1\DATA 2\REPORT.RPT

Hat Einer von Euch eine Idee, was hier "falsch" läuft und warum das Leerzeichen als Zeilenumbruch interpretiert wird.
Vielleicht muss ich aber auch "nur" einen anderen Befehl nutzen. Mir sind leider alle Ideen ausgegangen und auch alle meine Versuche sind leider fehlgeschlagen.

Vielen Dank für jede Idee, die mich auf den Weg zur Lösung meines "Problems" unterstützen kann.
Willi

Content-Key: 344920

Url: https://administrator.de/contentid/344920

Printed on: April 24, 2024 at 07:04 o'clock

Member: emeriks
emeriks Jul 30, 2017 at 14:47:03 (UTC)
Goto Top
Hi,
kannst Du ausschließen (hast Du es tatsächlich überprüft), dass an dieser Stelle in der Zeile nicht doch ein Steuerzeichen ist (ein Chr(13) oder Chr(10)) oder ein Chr(0)?

E.
Member: MuHMuH
MuHMuH Jul 30, 2017 at 15:09:49 (UTC)
Goto Top
Hallo Emeriks,

Du hast Recht, in der Zieldatei sind zusätzliche CRs und LFs enthalten. In der Quelldatei gibt es diese aber nicht.

In der durch TYPE erzeugen Datei sind diese auch nicht enthalten. Hier ist der gesamte Pfad in einer Zeile.

Durch Deinen Hinweis habe ich aber Folgendes bemerkt:
Gibt es eventuell eine Zeilenlängenbegrenzung mit dem Get-String Befehl bei der Ausgabe?

Es wird wohl automatisch einen Zeilenumbruch bei Erreichen einer bestimmten Zeilenlänge erzeugt.
Das Trennzeichen ist dann wohl das letzte Leerzeichen, vor dem Erreichen der Maximallänge.

Gruß
Willi
Member: emeriks
emeriks Jul 30, 2017 updated at 15:31:17 (UTC)
Goto Top
Du hast Recht, in der Zieldatei sind zusätzliche CRs und LFs enthalten. In der Quelldatei gibt es diese aber nicht.
Na in der Zieldatei ist klar. Meine Frage bezog sich natürlich auf die Quelldatei ...

Gibt es eventuell eine Zeilenlängenbegrenzung mit dem Get-String Befehl bei der Ausgabe?
Würde mich wundern, und laut diesem Artikel wohl nicht:
https://msdn.microsoft.com/en-us/powershell/reference/5.0/microsoft.powe ...

Allerdings müsste laut dem o.g. Artikel die Ausgabe anders aussehen:
By default, Select-String finds the first match in each line and, for each match, it displays the file name, line number, and all text in the line containing the match.
Deine Ausgabe ist da anders ...

Edit:
Und wenn ich das bei mir teste, dann ist dem auch so.
Bsp.:
select-string -path "C:\Users\XYZ\Desktop\WindowsUpdate.log" -pattern "Error"  
liefert dann sowas
C:\Users\XYZ\Desktop\WindowsUpdate.log:16833:2017.07.30 15:29:13.6861407 3020 8208 ComApi 0BCC.2010::07/30/2017-15:29:13.686 [comapi]Install call complete (succeeded = 1, succeeded with errors = 0, failed= 0, cancelled = 0, unaccounted = 0
Dateipfad : Zeilennummer : Die Zeile mit dem Treffer

Also, warum ist das bei Dir komplett anders? Was verschweigst Du?
Member: MuHMuH
MuHMuH Jul 30, 2017 at 15:36:50 (UTC)
Goto Top
Hallo Emeriks,

die Ausgabe ist incl. des Dateinamen und der Zeilennummer. Diese hatte ich nur wegen der Lesbarkeit wegelassen.

Entschuldige, wenn das zu Irritationen geführt hat.

Die erzeugte Datei muss ich mit Get-Content weiterverarbeiten. Das klappt aber so leider nicht.

Gruß
Willi
Member: emeriks
emeriks Jul 30, 2017 at 15:39:38 (UTC)
Goto Top
Aha.
Zu Deiner Rehabilitation face-wink muss ich anmerken, dass er es auch bei mir umbricht. face-wink
Das habe ich nicht gleich gemerkt. Allerdings erst nach 160 Zeichen.
160 Zeichen ist die Breite, welche ich für meine CMD voreingestellt habe. Also im Fester der Eingabeaufforderung links oben das Icon, Kontextmenü, Eigenschaften, Layout, Breite ...

Passt das zu Deiner Ausgabe?
Member: emeriks
Solution emeriks Jul 30, 2017 updated at 15:44:03 (UTC)
Goto Top
Die erzeugte Datei muss ich mit Get-Content weiterverarbeiten. Das klappt aber so leider nicht.
Das kannst Du einfacher haben und damit scheint es zu funktionieren:
Statt erst in eine Datei zu speichern und diese dann wieder einzulesen, kannst direkt in eine Variable speichern:
$Lines = Select-String -path "30-07-17_LOG.txt" -pattern "REPORT"  
Member: MuHMuH
MuHMuH Jul 30, 2017 at 15:57:17 (UTC)
Goto Top
Hallo Emeriks,

vielen Dank für Deine Rückmeldung. Dann liegt es ja doch nicht an meinem Script. face-smile
Du hast recht, es korrespondiert auch mit meinen Einstellungen in der Eingabeaufforderung.

Dann werde ich auf den Zwischenschritt verzichten, da hier wohl ein "kleiner" Bug vorliegt.
Wie Du ja richtig angemerkt hast, kann ich darauf ja auch ohne weiteres verzichten.

Vielen Dank für Deine Unterstützung und einen schönen Abend
Willi