Clear the Recycle Bin For All Users in Windows Server 2008 R2

Solution 1:

As far as I can tell, these is no "official" Microsoft supported way of doing this. There are two options. One involves deleting c:\$Recycle.Bin and the other is scripting cleanmgr.exe to run at each user logon.

The closest thing to "official" support for deleting c:\$Recycle.bin is from this MS KB, which references XP and Vista, but implies the expected behavior.


Immediate deletion

If you want this to happen immediately, it seems that you can just run rd /s c:\$Recycle.Bin and Windows should re-create the necessary folders the next time that they are needed. I just tested this quickly and it appears to work, but -obviously- proceed with caution.


Recurring logon-scriptable deletion

You can do this with the Disk Cleanup tool (cleanmgr.exe). Unfortunately, Microsoft decided to bundle this with the "Desktop Experience" set of features, meaning you'll have to install a bunch of other crap and reboot.

The alternative is to grab the following two files and move them to the specified locations per Technet:

C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr_31bf3856ad364e35_6.1.7600.16385_none_c9392808773cd7da\cleanmgr.exe
C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr.resources_31bf3856ad364e35_6.1.7600.16385_en-us_b9cb6194b257cc63\cleanmgr.exe.mui

Cleanmgr.exe should go in %systemroot%\System32.

Cleanmgr.exe.mui should go in %systemroot%\System32\en-US.

Running cleanmgr alone won't let you clear everyone's recycle bin, but you can use /sageset and /sagerun to make a logon script that runs for all users via GPO that will clear their recycle bin on the next logon, as described here. It's not the cleanest thing, but it will work. The linked article is for XP, but the syntax is unchanged as of Server 2008 R2.

Solution 2:

I don't think there is a proper way documented as the recycle bins for users are kept separate in their profiles; this would also be a security hazard to allow because documents or items in the recycle bin, if perused by users, could allow certain documents to be leaked.

It might be possible to script an administrator-privileged script to run and clear files from the trash of each local profile (but that might still be synced to the server holding your profiles if you have roaming profiles). But you need to have permissions and ownership properly set; I know on our servers Administrator does not have proper access to profiles on the storage server; administrator has to take ownership of the profile, and when we're done return ownership to the proper user or else profiles don't work properly for them anymore.

You could try running a process at logoff that clears the trash directory per user, but that also entails accidentally deleting something that they want to recover later and will now be gone since it was deleted at last logoff.

Probably the "proper" way to do it is to configure quotas on workstations and servers and when that quota is hit for storage, the user learns they have to delete items from the recycle bin. Because of security it would be a training issue. Otherwise you'd need a workaround.

@markm had a utility suggestion that appears to do this; I stand by the assertion that it's not a "proper" way since it's an add-on and not built into Windows by default (although I'm not surprised that the helpful administration utility isn't included.) The only other problem I'd worry about in using it is that it might have to be run on a workstation and on the server or you might have profile syncing issues with what appears where. It looks like it's supposed to be just a mini-tool for accessing the "disk cleanup" tab in Windows.

Another thought...untested...would be to use folder redirection to redirect their trash folder to a central server. I would classify this as a monumentally Bad Idea(tm), however. Then you'd delete their files from that shared directory. Linking this over the network, security setup, etc. would make this a level one priority kludge that would make other sysadmins run away before spontaneously combusting, however.


Solution 3:

I ran TreeSize Free and saw I had 15gigs in the Recycle Bin, but I couldn't see it, probably because it was done by a long departed user. But in TreeSize Pro I could delete it, which put the data into the Recycle Bin that I could see.


Solution 4:

This works for me:-

Get-ChildItem "C:\`$Recycle.bin\" | Remove-Item -Recurse -Force

It will remove the recycle.bin; Windows will re-create the recycle bin as required, i.e. as soon as a user deletes a new file.

Might no be the most elegant code and there may well be a better way to do it but it will help free up space on a congested server. You can test it using the -WhatIf switch on the Remove-Item command.

Get-ChildItem "C:\`$Recycle.bin\" | Remove-Item -Recurse -Force -WhatIf

NB: Each drive maintains its own recycle bin; so you'd want to replace the drive letter with whichever drive you're running this command for, or you can use the following for all local drives:

Get-PSProvider -PSProvider FileSystem `
| Select-Object -ExpandProperty Drives `
| Where-Object { $_.DisplayRoot -notlike "\\*" } `
| Select-Object -ExpandProperty Root `
| ForEach-Object { "$_`$Recycle.bin\" } `
| Where-Object { Test-Path -Path $_ -PathType Container } `
| ForEach-Object { Get-ChildItem -Path $_ -Force | Remove-Item -Recurse -Force }

Hope this helps