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" }
Ein Kommentar
ab der Version 5 geht das mit dem Schalter -Depth
z.B.
Get-ChildItem „f:\temp“ -Directory -Recurse -Depth 2 | select fullname