Delete Files Older than 90 Days with Powershell
Posted in on Tuesday, September 11, 2012 by cam
Here is a powershell script that has been stolen, chopped up and modified.
Its logs the changes to Windows Event Viewer (because log files are so yesterday!) and removes files more than 90 days old from the directories specified.
# Script that deletes files older than 90 days in the E:Data directory. Function Write-Log { [cmdletbinding()] Param( [Parameter(Position=0)] [ValidateNotNullOrEmpty()] [string]$Message ) $evt=new-object System.Diagnostics.EventLog("Application") $evt.Source="Scans Directory Cleanup" $infoevent=[System.Diagnostics.EventLogEntryType]::Information $vdate=Get-Date $val="$Message" $evt.WriteEntry($val,$infoevent,2455) } Function RemoveFilesAndDirs { Param( [Parameter(Position=0)] [array]$Paths, [Parameter(Position=1)] [ValidateNotNullOrEmpty()] [DateTime]$TargetDate ) foreach ($path in $Paths){ $files = (Get-ChildItem $path -recurse | where {$_.Lastwritetime -lt $TargetDate}) Write-Log "Attempting to remove old files on $path" # Test if we are really moving files $re=0 try { foreach ($file in $files){ Write-Log ($file.fullname).ToString() } } catch [System.Management.Automation.RuntimeException] { $re = 1 Write-Log "Nothing to delete" } if($re -ne 1){ Get-ChildItem $path -recurse | where {$_.Lastwritetime -lt $TargetDate} | remove-item -recurse } } } $today = Get-Date -displayhint date $targetdate = ($today.AddDays(-90)) $path = "E:/Data" $directories = @("$path/temp","$path/scratch","$path/dev-temp","$path/rubbish") Write-Log "Starting cleanup" Write-Log "Files older than $targetdate will be deleted" RemoveFilesAndDirs $directories $targetdate Write-Log "*** Done ***"