Powershell: Zeile in Log Datei schreiben, die gesuchten String enthält?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Im einfachsten Fall kannst Du einfach den guten alten Consolenbefehl findstr benutzen und den Outpu in die Gewünschte Datei umleiten. (das funktioniert sowohl in Cmd/Batch als auch in Powershell

findstr /s /n /c:"Suchtext"  "*.txt" >"test.log"

...für die ganze festplatte

findstr /s /n /c:"Suchtext"  "C:\*.txt" >"test.log"

Nur in Powershell geht auch das:

findstr /s /n /c:"Suchtext"  "*.cmd" | Out-File -FilePath 'test.log'
Mit Powershell Cmdlets:

suche im aktuellen Ordner mit Select-String

Select-String -Path "*.*" -Pattern "Suchtext"

Soll auch recursiv in Unterordnern gesucht werden, müssen zuvor die Dateien von Get-ChildItem bereitgestellt werden.

Get-ChildItem -Recurse | Select-String -Pattern "Suchtext" 

Natürlich kannst Du auch Einfluss auf die Art des Outputs nehmen:

Get-ChildItem -Recurse | Select-String -Pattern "echo" |Select-Object Path,LineNumber |Format-Table

Ob Du die Daten auf dem Bildschirm oder in eine Datei ausgibst ist lediglich eine Frage der Umleitung am Ende der Pipeline.

...| Out-File -FilePath 'test.log'
...>'test.log'
...| Tee-Object 'test.log'
aber Aufgepasst!!!!!

Die OutputDatei darf bei einem Dateifilter *.* nicht im zu durchsuchenden Pfad liegen, sonst hat man eine Endlosschleife, weil der gefundene String in die Datei umgeleitet wird, und dort gefunden wird und dort gefunden wird. und dort gefunden wird.... (bei findstr kein Problem)

oder die Outputdatei per -Exclude -parameter von den Funden ausschließen:

Get-ChildItem -exclude 'test.log' |.....

Wenn Du die ganze Festplatte durchsuchen willst, ist der Zugriff auf einige Ordner beschränkt da muss man Fehler mit -ErrorAction SilentlyContinue unterdrücken .

am Ende sieht die sache in etwa so aus:

Get-ChildItem -Path 'C:\' -Filter '*.txt' -Exclude 'test.log' -Recurse -ErrorAction SilentlyContinue | Select-String  -Pattern "Suchstring" | Tee-Object 'test.log'
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Guterfrager21 
Fragesteller
 01.03.2023, 21:08

Vielen Dank für diese ausführliche Antwort!

0