2017-07-12 2 views
1

Ich schrieb ein Powershell-Skript, sucht nach einer Zeichenfolge (z. B. Fehler) in Protokolldateien und greift diese Zeilen und gibt diese Zeilen in eine Datei, zum einfacheren Lesen und dergleichen (die Industrie, in der ich bin, hat sehr große Protokolldateien), aber ich habe ein Problem. Früher, als die (relevanten) Teil des Codes sah wie folgt aus:
Select-Objekt Ausgabe von Select-String Powershell

Select-String -Path "$file" -Pattern "$string" -CaseSensitive | Out-File -filepath $filepath 

Es würde die Ausgabe der Dateipfad, die Zeilennummer, und dann die eigentliche Linie, für eine sehr unübersichtlich Datei zu machen. Nun, ich brauchte nur die Zeile und die Zeilennummer, also tat ich dies:

Select-String -Path "$file" -Pattern "$string" -CaseSensitive | Select-Object -Property LineNumber,Line | Out-File -filepath $filepath 

Welche Linien aussehen wie diese zurückkehren würde:

978 2017-07-10 10:46:11,288 ERROR [Music... 

Das ist die Zeilennummer ist dann die Zeile, mit die Zeile hat nur 35 Zeichen.
Bevor ich Select-String an Select-Object piped, würde das Skript die gesamte Zeile ausgeben, aber jetzt mit Select-Object es einige Ausgaben ausgelassen. Ich versuchte -verbose Parameter zu Select-String und Select-Object hinzuzufügen, aber das tat nichts.

Antwort

3

Können Sie dies versuchen:

Select-String -Path "test.xml" -Pattern "ERROR" -CaseSensitive | ft -Property LineNumber,Line -Wrap | Out-File -FilePath c:\out.txt 

Der Grund für Ihr Problem ist Bildschirm Pufferlänge (increasing powershell screen buffer width), können Sie es auch ändern, aber das obige Snippet ist einfacher und effektiver

+0

Das ist genial! Das Screen-Puffer-Ding kam mir nicht in den Sinn, und ich werde versuchen, es zu erweitern, aber schreibe es jetzt in eine Tabelle und lege die Worte zusammen! Vielen Dank! –