PowerShell–Rekursiv nach Änderungsdatum sortieren

#powershell edit this page

Ganze Ordnerstrukturen oder Laufwerke nach Dateien zu durchsuchen die zuletzt geändert worden sind kann ganz schön mühsam sein. Mit der PowerShell geht das in einem Oneliner.

PS X:\> Get-ChildItem C:\Windows\Logs -Recurse | Sort-Object -Property LastWriteTime –Descending | Where-Object {$_.Mode -notlike "d*"} | Select-Object -First 10 | Format-Table -Property LastWriteTime,FullName –AutoSize

Dieses Beispiel durchsucht C:\Windows\Logs rekursiv und sortiert Absteigend nach “LastWriteTime”. Ordner werden standardmäßig auch zurückgegeben, diese werden mit “Where-Object” gefiltert. Da mich nur die 10 Dateien interessieren die zuletzt geändert wurden verwende ich “Select-Object”. Anschließend wird die Ausgabe noch Formatiert. Das Ganze sieht dann so aus:

image

Möchte man das Ergebnis in eine Datei schreiben, bietet sich das cmdlet “Export-CSV” an, dafür ändert man die “Select-Object” Abfrage z.B. folgendermaßen:

PS X:\> Get-ChildItem C:\Windows\Logs -Recurse | Sort-Object -Property LastWriteTime -Descending | Where-Object {$_.Mode -notlike "d*"} | Select-Object –Property FullName,CreationTime,LastWriteTime,LastAccessTime,Length,Attributes | Export-Csv Report.csv

Das Ergebnis sieht dann so aus:

image

Durch Änderungen der Where, Select, Format cmdlets bzw. Parameter lässt sich eine Vielzahl von Ausgaben erzeugen, für weitere Informationen und Hilfe zu den einzelnen cmdlets:

Get-Help cmdlet –Online

Achtung: Der Parameter “Recurse” geht durch alle untergeordneten Verzeichnisse, das kann je nach Struktur ziemlich lange dauern. Außerdem gelten Berechtigungen natürlich auch für die PowerShell, man kann also nicht Ordner durchsuchen auf die man keine Rechte hat, das sieht dann so aus:

image

have fun!
tom