Wednesday, October 10, 2012

Delete files and folders older than 90 days

A rough start for a blog.

Don't expect for long stories about romantic walks outside or whine about evenings when my dog pooped on the floor.

There you go, some powershell right in your face!

Problem

Folder has tons of items inside and all the files are irrelevant after 90 days.
Irrelevant files need to be deleted.

Solution

I have been using different approaches to do this task. Today my colleague asked for a script that deletes files older than 90 days. Didn't want to give him the "temporary script" I had used before, so I converted it to be oneliner. Here it is:
Get-ChildItem -Path "PUT PATH HERE" -Include "PUT FILTER HERE" -Recurse | where {$_.LastWriteTime -le $(get-date).AddDays(-N)} | Remove-Item
 So you could have it remove all files located in "c:\temp" that have ".txt" extension that have not been updated in past 90 days with the command below:
Get-ChildItem -Path "C:\test" -Include "*.txt" -Recurse | where {$_.LastWriteTime -le $(get-date).AddDays(-90)} | Remove-Item

Conclusion

It is a good idea to remove the last "| Remove-Item" at start and try running it in Console. Review the list of files that would get deleted, if the results get piped to Remove-Item commandlet.


To execute commands as task, you can use the -command parameter for powershell:
-Command "write-host TEST; pause;"
You might want to add these arguments also:
–Noninteractive –Nologo

Read more about running powershell tasks with scheduler from here

Please leave comments if you find this useful or think that this could be achieved in better way.

1 comment:

  1. And as a oneliner for task scheduler, it would be:
    powershell -Command "& { Get-ChildItem -Path "C:\test" -Include "*.txt" -Recurse | where {$_.LastWriteTime -le $(get-date).AddDays(-90)} | Remove-Item } "

    ReplyDelete