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:
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:
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:
have fun!
tom