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"
    }

     

    1 Kommentar

    1. ab der Version 5 geht das mit dem Schalter -Depth
      z.B.
      Get-ChildItem „f:\temp“ -Directory -Recurse -Depth 2 | select fullname

    Leave A Reply