Как правильно очистить корзину для всех пользователей в Windows Server 2008 R2?
Как правильно очистить корзину для всех пользователей в Windows Server 2008 R2?
Ответы:
Насколько я могу судить, это не «официальный» способ, поддерживаемый Microsoft. Есть два варианта. Один включает удаление c: \ $ Recycle.Bin, а другой - создание сценария cleanmgr.exe для запуска при каждом входе пользователя в систему.
Ближайшая вещь к «официальной» поддержке удаления c: \ $ Recycle.bin - из этого MS KB , который ссылается на XP и Vista, но подразумевает ожидаемое поведение.
Если вы хотите, чтобы это произошло немедленно, кажется, что вы можете просто запустить, rd /s c:\$Recycle.Bin
и Windows должна заново создать необходимые папки в следующий раз, когда они понадобятся. Я только что проверил это быстро, и это, кажется, работает, но, очевидно, действуйте с осторожностью.
Вы можете сделать это с помощью инструмента очистки диска (cleanmgr.exe). К сожалению, Microsoft решила объединить это с набором функций «Desktop Experience», что означает, что вам придется установить кучу других дерьмов и перезагрузить компьютер.
Альтернатива состоит в том, чтобы взять следующие два файла и переместить их в указанные местоположения в 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 сделать это. Альтернативой является удаление папки корзины на каждом профиле. Он должен воссоздать его при следующем входе в систему для каждого пользователя, но я бы немного устал, чтобы попробовать это в работе.
Я не думаю, что есть надлежащий путь, документированный, поскольку корзины для пользователей хранятся отдельно в их профилях; это также может представлять угрозу безопасности, поскольку документы или предметы в корзине, если они просматриваются пользователями, могут допускать утечку определенных документов.
Может быть возможно создать сценарий с привилегированными правами администратора для запуска и очистки файлов из корзины каждого локального профиля (но он все равно может быть синхронизирован с сервером, на котором хранятся ваши профили, если у вас есть перемещаемые профили). Но вам нужно правильно установить права доступа и права собственности; Я знаю, что на наших серверах администратор не имеет надлежащего доступа к профилям на сервере хранения; администратор должен взять на себя владение профилем, и когда мы закончим, верните право собственности соответствующему пользователю, иначе профили больше не будут работать для него должным образом.
Вы можете попробовать запустить процесс при выходе из системы, который очищает каталог корзины для каждого пользователя, но это также влечет за собой случайное удаление чего-то, что он хочет восстановить позже, и теперь будет удалено, поскольку оно было удалено при последнем выходе из системы.
Вероятно, «правильный» способ сделать это - настроить квоты на рабочих станциях и серверах, и когда эта квота используется для хранения, пользователь узнает, что ему нужно удалять элементы из корзины. Из-за безопасности это было бы проблемой обучения. В противном случае вам понадобится обходной путь.
У @markm было полезное предложение, которое, кажется, делает это; Я поддерживаю утверждение, что это не «правильный» способ, так как это надстройка, которая не встроена в Windows по умолчанию (хотя я не удивлен, что полезная утилита администрирования не включена). Единственная другая проблема, которую я имею » Я беспокоюсь о том, чтобы использовать его из-за того, что он может быть запущен на рабочей станции и на сервере, или у вас могут возникнуть проблемы с синхронизацией профилей с тем, что и где появляется. Похоже, это просто мини-инструмент для доступа к вкладке «Очистка диска» в Windows.
Другая мысль ... непроверенная ... состояла в том, чтобы использовать перенаправление папок для перенаправления их папки с мусором на центральный сервер. Однако я бы отнес это к монументально плохой идее. Затем вы удалите их файлы из этого общего каталога. Связывание этого по сети, настройка безопасности и т. Д. Сделают это приоритетным приоритетом первого уровня, который, однако, заставит других системных администраторов убежать до самопроизвольного сгорания.
Я запустил TreeSize Free и увидел, что у меня в корзине было 15 гигов, но я этого не видел, возможно, потому, что это сделал давно ушедший пользователь. Но в TreeSize Pro я мог удалить его, что поместило данные в корзину, которую я мог видеть.
Это работает для меня: -
Get-ChildItem "C:\`$Recycle.bin\" | Remove-Item -Recurse -Force
Это удалит recycle.bin; Windows заново создаст корзину как требуется, то есть, как только пользователь удалит новый файл.
Это может быть не самый элегантный код, и, возможно, есть лучший способ сделать это, но это поможет освободить место на перегруженном сервере. Вы можете проверить это с помощью ключа -WhatIf команды Remove-Item.
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 }
Надеюсь это поможет
У меня была корзина с 4 ГБ данных, но я не смог ее очистить. Зашел и нашел кучу профилей, которые больше не использовались на сервере, и удалил их в свойствах системы - Дополнительно - Профили пользователей, и теперь корзина пуста.
Очевидно, не удаляйте учетные записи, которые все еще используются или используются, но как администратор, вы можете сделать это таким образом.
Мне понравилось это решение, потому что легко понять, что оно делает, и оно выполняет свою работу, но чтобы работать из любого места, из которого вы запускаете команду, вам нужно запустить изменить его следующим образом (добавив \ после "drive_letter: ") и чтобы иметь возможность удалить эту папку от других пользователей .. вам нужно добавить" -force "в конце команды remove-item. Кроме того, поскольку вы удаляете все папки в C: \ $ Recycle.bin \, вам не нужно включать «-recurse» при получении дочерних элементов. Так что это будет последняя команда, которую я бы использовал вместо:
Get-ChildItem "C:` $ Recycle.bin \ "-Force | Remove-Item -Recurse -force -WhatIf
удаление -WhatIf, если вы хотите сделать больше, чем просто тестирование команды
Используйте процесс ниже, чтобы удалить все файлы.
Все файлы будут удалены с диска.