清除Windows Server 2008 R2中所有用户的回收站的正确方法是什么?
清除Windows Server 2008 R2中所有用户的回收站的正确方法是什么?
Answers:
据我所知,这不是Microsoft支持的“官方”方式。有两种选择。一种涉及删除c:\ $ Recycle.Bin,另一种涉及编写脚本cleanmgr.exe以在每次用户登录时运行。
关于删除c:\ $ Recycle.bin的“正式”支持最接近的是此MS KB,该MS KB引用了XP和Vista,但暗示了预期的行为。
如果您希望这种情况立即发生,则似乎可以运行rd /s c:\$Recycle.Bin
,Windows下次需要它们时,应重新创建必要的文件夹。我刚刚对其进行了快速测试,它似乎可以正常工作,但是-显然-请谨慎行事。
您可以使用磁盘清理工具(cleanmgr.exe)来执行此操作。不幸的是,Microsoft决定将此功能与“桌面体验”功能捆绑在一起,这意味着您必须安装许多其他功能并重新启动。
替代方法是获取以下两个文件,并将其移动到每个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应该进入%systemroot%\ System32。
Cleanmgr.exe.mui应该进入%systemroot%\ System32 \ en-US。
单独运行cleanmgr不会让你清楚每个人的回收站,但你可以使用/ sageset和/ SAGERUN,以使该所描述的运行经由GPO的所有用户,将清除下次登录自己的回收站,登录脚本在这里。这不是最干净的东西,但是会起作用。链接的文章适用于XP,但从Server 2008 R2开始语法不变。
cleanmgr
每次登录时运行的脚本都是最接近MS官方方式的脚本。替代方法是删除每个配置文件上的回收站文件夹。它应该在每个用户的下一次登录时重新创建它,但是我会有点疲倦地在生产中尝试使用它。
我认为没有记录的正确方法,因为用户的回收站在其个人资料中保持独立;这也将构成安全隐患,因为如果用户仔细阅读回收站中的文件或物品,可能会使某些文件泄漏。
可能可以编写脚本,获取管理员特权的脚本,以运行和清除每个本地配置文件的废纸files中的文件(但是,如果您具有漫游配置文件,该脚本仍可能会同步到保存您的配置文件的服务器上)。但是您需要正确设置权限和所有权。我知道在我们的服务器上,管理员对存储服务器上的配置文件没有适当的访问权限;管理员必须拥有该配置文件的所有权,完成后,将所有权返还给适当的用户,否则配置文件将不再适合他们。
您可以尝试在注销时运行一个进程,该进程将清除每个用户的垃圾目录,但同时也需要不小心删除他们想要稍后恢复的内容,因为它在上次注销时已被删除,因此现在将消失。
可能的“正确”方法是在工作站和服务器上配置配额,当达到配额以进行存储时,用户得知他们必须从回收站中删除项目。由于安全原因,这将是一个培训问题。否则,您将需要一种解决方法。
@markm有实用程序建议,似乎可以做到这一点;我坚持说这不是“正确的”方法,因为它是附加组件,并且默认情况下未内置到Windows中(尽管我不惊讶不包含有用的管理实用程序。) d使用它的担心是它可能必须在工作站和服务器上运行,或者您可能遇到配置文件同步问题以及出现在何处的问题。看起来它应该只是用来访问Windows中“磁盘清理”选项卡的迷你工具。
另一个想法...未使用...将使用文件夹重定向将其垃圾文件夹重定向到中央服务器。但是,我将其归类为一个巨大的坏主意(tm)。然后,您将从该共享目录中删除其文件。通过网络,安全设置等将其链接起来,将使其成为一级优先事项,但是这会使其他系统管理员在自发燃烧之前就逃之run。
这对我有用:
Get-ChildItem "C:\`$Recycle.bin\" | Remove-Item -Recurse -Force
它将删除recycle.bin; Windows将根据需要重新创建回收站,即用户删除新文件后立即重新创建。
可能不是最优雅的代码,并且可能会有更好的方法,但是它将帮助释放拥挤的服务器上的空间。您可以使用Remove-Item命令上的-WhatIf开关对其进行测试。
Get-ChildItem "C:\`$Recycle.bin\" | Remove-Item -Recurse -Force -WhatIf
注意:每个驱动器都有自己的回收站;因此,您要用运行此命令的驱动器替换驱动器号,或者可以对所有本地驱动器使用以下命令:
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 }
希望这可以帮助
我喜欢这个解决方案,是因为它易于理解它的作用以及它的工作原理,但是为了在运行命令的任何位置工作,您需要像下面这样更改它(在drive_letter之后添加一个\: ”),然后才能从其他用户删除这些文件夹。.您需要在remove-item命令的末尾添加“ -force”。另外,由于要删除C:\ $ Recycle.bin \中的所有文件夹,因此在获取子项时不需要包括“ -recurse”。因此,这将是我将使用的最终命令:
Get-ChildItem“ C:`$ Recycle.bin \”-强制| Remove-Item-递归-force -WhatIf
删除-WhatIf如果您想做的不仅仅是测试命令
使用以下过程删除所有文件。
所有文件将从磁盘中删除。