logo-powershell
This script will allow you to delete the Recycle bin items older than 60 days.

The recycle bin items are listed in the system where the script is running on.

ForEach ($DriveLetter in Get-PSDrive -PSProvider FileSystem) {
	$DelPath = $DriveLetter.Name + ':\$Recycle.Bin'
	Get-ChildItem $DelPath -Force -Recurse -ErrorAction SilentlyContinue | `
		Where-Object { (Get-Date).AddDays(-60) -gt $_.LastWriteTime } | `
		Remove-Item
}

Before executing this script in a production environment, you can add the “whatif” switch to the cmdlet Remove-item


References

Using the Remove-Item cmdlet

Deleting a File or Folder (Or Other Type of Object)
The Remove-Item cmdlet does exactly what the name implies: it enables you to get rid of things once and for all. Tired of the file C:\Scripts\Test.txt? Then delete it:

Remove-Item c:\scripts\test.txt

You can also use wildcard characters to remove multiple items. For example, this command removes all the files in C:\Scripts:

Remove-Item c:\scripts\*

There is one catch, however. Suppose C:\Scripts contains subfolders. In that case, you’ll be prompted as to whether or not you really do want to delete everything in the Scripts folder:

Confirm
The item at C:\test\scripts has children and the -recurse parameter was not specified. 
If you continue, all children will be removed with the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

Is there a way to bypass this prompt? Yep; just tack the -recurse parameter onto the end of your command:

Remove-Item c:\scripts\* -recurse

Here’s an interesting variation. Suppose the Scripts folder contains a bunch of files and you’d like to delete them all. Wait: maybe not all, maybe you’d like to leave any .wav files. No problem; just use the -exclude parameter and indicate the file types that should be excluded from the deletion:

Remove-Item c:\scripts\* -exclude *.wav

What’s that? Now you’d like to remove just .wav and .mp3 files, leaving all other file types alone? All you had to do was ask (and use the -include parameter):

Remove-Item c:\scripts\* -include .wav,.mp3

As you’ve probably figured out, if you use the -include parameter the cmdlet will act only on those items specified as part of that parameter. (And, yes, you can specify multiple items; just separate items using commas.) By contrast, if you use the -exclude parameter those items will be exempt from the cmdlet actions.
And yes, if you want to get really fancy you can use both -include and -exclude in the same command. What do you suppose will happen when we run this command?

Remove-Item c:\scripts\* -include *.txt -exclude *test*

You got it: all the .txt files (as indicated by the -include parameter) in the C:\Scripts folder will be deleted, except for any files that have the string value test anywhere in the file name (as indicated by the -exclude parameter). Try some different variations, and it will soon make perfect sense.
Incidentally, the Remove-Item cmdlet has a -whatif parameter that doesn’t actually remove anything but simply tells you what would happen if you did call Remove-Item. What do you mean that doesn’t make any sense? Here, take a look at this command:

Remove-Item c:\scripts\*.vbs -whatif

If we run this command, none of the .vbs files in the folder C:\Scripts will be removed; however, we will get back information like this, which lets us know which files would be removed if we called Remove-Item without the -whatif parameter:

What if: Performing operation "Remove File" on Target "C:\scripts\imapi.vbs".
What if: Performing operation "Remove File" on Target "C:\scripts\imapi2.vbs".
What if: Performing operation "Remove File" on Target "C:\scripts\methods.vbs".
What if: Performing operation "Remove File" on Target "C:\scripts\read-write.vbs".
What if: Performing operation "Remove File" on Target "C:\scripts\test.vbs".
What if: Performing operation "Remove File" on Target "C:\scripts\winsat.vbs".

In addition, you can remove things other than files and folders. For example, this command gets rid of an alias named show:

Remove-Item alias:\show

Make a note of how you specify the location: alias:\. That’s standard notation for all Windows PowerShell drives: the drive letter followed by a colon followed by a \. For example, to switch to the Windows PowerShell drive for environment variables use this command:

Set-Location env:\

Remove-Item Aliases
ri
rd
erase
rm
rmdir
del
<>
Delete the Recycle bin items older than 60 days

Leave a Reply

Your email address will not be published.