What is the proper way to clear the recycle bin for all users in Windows Server 2008 R2?
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.
If you want this to happen immediately, it seems that you can just run
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:
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.
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.
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.
I had a recycle bin that was showing over 4GB of data but I was unable to clear it. Went in and found a bunch of profiles that were no longer used on the server and removed them under system properties - Advanced - User Profiles and now the recycle bin is empty.
Obviously don't delete any accounts that are still current or in use but as an administrator, you can do it this way.
This works for me:-
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.
Hope this helps
I liked this solution because is easy to understand what it is doing and it does the job, but in order to work from any location you run the command from, you need to run change it like this (adding a \ after the "drive_letter:") and to be able to delete those folder from other users.. you need to add the "-force" at the end of the remove-item command. Additionally as you are deleting all folders within C:\$Recycle.bin\ you do not need to include "-recurse" when getting the child items. So this will be the final command i would use instead:
Get-ChildItem "C:`$Recycle.bin\" -Force | Remove-Item -Recurse -force -WhatIf
removing -WhatIf if you want to do more than only testing the command