Website-Icon .: blog cscholz.io :.

Powershell: Rekursion in Suche beschränken sowie inhaltlich Suchen

Auf der Powershell kann man mit Hilfe des Cmdlets Get-Childitem nach Dateien oder Ordnern suchen. Je nach Aufgabe, möchte man jedoch nicht alle Unterordner durchsuchen, sondern nur die ersten 1,2 oder 3 Ebenen.

Nach ein bisschen rumprobieren bin ich dann auf folgende Lösung gestoßen. Man kann in der Variable Path Wildcard multiplizieren um so z.B. die Suche auf zwei Ebenen zu beschränken.

Get-ChildItem -Path ('*'*2) -Filter login.log

Mit Laufwerksangabe sieht das ganze dann wiefolgt aus:

Get-ChildItem -Path ('e:' + '*'*2) -Filter "login.log"

Um sich jetzt z.B. alle login.log Dateien auf E: sowie allen Unterordnern bix max. der drittenen Ebene auflisten zu lassen, kann man diesen Befehl in einer Schleife durchlaufen und die jeweiligen Treffer in einer Datei speichert.

Get-ChildItem -Path ('e:' + '*'*3) -Filter "login.log" | foreach {
    add-content $_ -path e:result.txt
}

Oder alternativ, zum späteren durchsuchen alle gefundenen Dateien in einer zusammen fassen:

Get-ChildItem -Path ('e:' + '*'*3) -Filter "login.log" | foreach {
    add-content -value (get-content $_) -path e:result.txt
}

Man kann aber auch direkt in den gefundenen Dateien nach den entsprechenden Zeilen suchen und sich z.B. die erste Zeile vor dem Treffer mittels Select-String ebenfalls ausgeben:

Get-ChildItem -Path ('e:' + '*'*3) -Filter "login.log" | foreach {
    Select-String -path $_ -Context 1,0 -SimpleMatch "RAWL0247"
}

 

Die mobile Version verlassen