I whipped up this script to quickly find the oldest and newest files in a folder with PowerShell because we have some archive folders that have millions of files and it can crash Windows Explorer. Other scripts I’ve seen online use PowerShell’s Where-Object after doing a sort on the entire collection, but that’s inefficient because it requires sorting millions of file records, which is slow. What I’m doing is using ForEach-Object to track the oldest and newest dates as I parse through the directory list in whatever order it comes to me. It saves a lot of time and memory. Enjoy!
$olddate = [DateTime]::MaxValue
$newdate = [DateTime]::MinValue
$oldfn = ""
$newfn = ""
$path = "."
get-childitem $path | ForEach-Object {
if ($_.LastWriteTime -lt $olddate -and -not $_.PSIsContainer) {
$oldfn = $_.Name
$olddate = $_.LastWriteTime
}
if ($_.LastWriteTime -gt $newdate -and -not $_.PSIsContainer) {
$newfn = $_.Name
$newdate = $_.LastWriteTime
}
}
$output = ""
if ($oldfn -ne "") { $output += "`nOldest: " + $olddate + " -- " + $oldfn }
if ($newfn -ne "") { $output += "`nNewest: " + $newdate + " -- " + $newfn }
if ($output -eq "") { $output += "`nFolder is empty." }
$output + "`n"