Powershell: Rekursion in Suche beschränken sowie inhaltlich Suchen

0

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

 

Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

Antworten