Очистите кэш и временные файлы в профилях пользователей в Windows (RDS) с помощью PowerShell и GPO.
Администраторы ферм Windows Server RDS часто сталкиваются с проблемой нехватки места на системном диске из-за большого объема пользовательских данных. В этой статье показано, как использовать PowerShell и групповые политики для автоматической очистки папок «Корзина», «Загрузки», «Temp» и «Кэш» в профилях пользователей в Windows.
Автоматическая очистка временных папок и папок загрузки с помощью дискового пространства Windows
Вы можете использовать встроенную функцию Контроль памяти для автоматического удаления старых и временных файлов в Windows Server 2019/2022 и Windows 10/11. Он имеет специальные параметры объекта групповой политики, которые позволяют очищать папки Temp и Downloads.
Как очистить корзину для пользователей Windows?
По умолчанию папка «Корзина» (
$Recycle.Bin) для удаленных файлов включен на хосте Windows. Для каждого пользователя в этом каталоге создается отдельная папка корзины (с именем SID пользователя) на сервере RDS. Со временем вы обнаружите, что общий размер файлов в корзинах всех пользователей будет занимать значительный объем дискового пространства на хосте RDS.
Размер корзины по умолчанию в Windows составляет около 5% от размера диска. Изменить максимальный размер корзины на каждом диске можно в его свойствах. Здесь вы также можете полностью отключить корзину, используя параметр Не перемещать файлы в корзину. Однако это изменит только настройки корзины для текущего пользователя.
Вы можете установить максимальный размер корзины для пользователей с помощью параметра GPO Максимально допустимый размер корзины в разделе «Конфигурация пользователя» -> «Административные шаблоны» -> «Компоненты Windows» -> «Проводник». Максимальный размер корзины устанавливается в процентах от размера вашего диска. Установка значения 0 отключает корзину на всех дисках.
Чтобы очистить корзину в Windows, вы можете использовать командлет Clear-RecycleBin (доступен в PowerShell 5.1 и более поздних версиях в Windows 10). Чтобы очистить корзину без запроса, выполните следующую команду:
Clear-RecycleBin -ForceЕсли вы запустите эту команду от имени обычного пользователя на узле RDS, будет очищена только корзина текущего пользователя. Вы можете добавить эту команду в сценарии выхода из GPO, чтобы очищать корзину, когда пользователь выходит из системы:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command Clear-RecycleBin -Confirm:$falseВ предыдущих версиях Windows (с более старыми версиями PowerShell) вы можете использовать следующий код для очистки RecycleBin:
$Shell = New-Object -ComObject Shell.Application
$RecycleBin = $Shell.Namespace(0xA)
$RecycleBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}Очистите папки «Кэш», «Temp» и «Загрузки» в профиле пользователя с помощью PowerShell.
Давайте рассмотрим сценарий PowerShell для очистки Temp, Downloads и некоторых других временных папок в профиле пользователя на Windows Server RDS или настольном компьютере под управлением Windows 10/11.
Комментарии к скрипту:
-
В этом примере мы удалим файлы старше 14 дней в папке «Загрузки» (вы можете изменить этот параметр). Остальные папки с кэшем и временными файлами будут совершенно пусты;
Сценарий выполняется в контексте текущего пользователя (сценарий удаляет старые файлы, когда пользователь выходит из системы Windows, и запускается как сценарий выхода из объекта групповой политики);
При использовании в среде RDS убедитесь, что пользователи нажимают кнопку «Выход/Вход», чтобы завершить свои сеансы. Мы также рекомендуем настроить таймауты сеансов RDS для автоматического завершения сеансов после периода бездействия.
Вся информация об удаленных файлах будет сохраняться в текстовый файл журнала (вы можете отключить это после отладки скрипта на тестовых пользователях);
Он также очистит историю и кеш RDP-соединений;
Папка отчетов об ошибках Windows (WER) в профиле пользователя очищается;
Строки, очищающие кэш Google Chrome, в скрипте закомментированы. Если ваши пользователи им пользуются и кеш Chrome занимает много места, раскомментируйте строки с путями;
Вы можете добавить дополнительную операцию по проверке текущего размера папки профиля пользователя до и после очистки (позволяет получить более точную информацию, но занимает некоторое время). Или можно просто проверить свободное место на диске до и после (делается быстро).
# You can use this script to clean folders in a user profile (cache, temp, downloads, google chrome cache) on RDS hosts, VDIs, or workstations
# Run the PowerShell script under a commaon user account (no administrator privileges are required). Only temporary files and the current user's cache are deleted.
# You can run this script via GPO (logoff script) or with the Task Scheduler
# Test the script in your environment and then remove the WhatIf option to permanently delete files
$Logfile = "$env:USERPROFILE\cleanup_profile_script.log"
$OldFilesData = (Get-Date).AddDays(-14)
# Complete cleanup of cache folders
[array] $clear_paths = (
'AppData\Local\Temp',
'AppData\Local\Microsoft\Terminal Server Client\Cache',
'AppData\Local\Microsoft\Windows\WER',
'AppData\Local\Microsoft\Windows\AppCache',
'AppData\Local\CrashDumps'
#'AppData\Local\Google\Chrome\User Data\Default\Cache',
#'AppData\Local\Google\Chrome\User Data\Default\Cache2\entries',
#'AppData\Local\Google\Chrome\User Data\Default\Cookies',
#'AppData\Local\Google\Chrome\User Data\Default\Media Cache',
#'AppData\Local\Google\Chrome\User Data\Default\Cookies-Journal'
)
# Folders where only old files should be removed
[array] $clear_old_paths = (
'Downloads'
)
function WriteLog {
Param ([string]$LogString)
$Stamp = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}
WriteLog "Starting profile cleanup script"
# If you want to clear the Google Chrome cache folder, stop the chrome.exe process
$currentuser = $env:UserDomain + "\"+ $env:UserName
WriteLog "Stopping Chrome.exe Process for $currentuser"
Get-Process -Name chrome -ErrorAction SilentlyContinue | Where-Object {$_.SI -eq (Get-Process -PID $PID).SessionId} | Stop-Process
Start-Sleep -Seconds 5
# Clean up cache folders
ForEach ($path In $clear_paths) {
If ((Test-Path -Path "$env:USERPROFILE\$path") -eq $true) {
WriteLog "Clearing $env:USERPROFILE\$path"
Remove-Item -Path "$env:USERPROFILE\$path" -Recurse -Force -ErrorAction SilentlyContinue -WhatIf -Verbose 4>&1 | Add-Content $Logfile
}
}
# Delete old files
ForEach ($path_old In $clear_old_paths) {
If ((Test-Path -Path "$env:USERPROFILE\$path_old") -eq $true) {
WriteLog "Clearing $env:USERPROFILE\$path_old"
Get-ChildItem -Path "$env:USERPROFILE\$path_old" -Recurse -Force -ErrorAction SilentlyContinue | Where-Object {($_.LastWriteTime -lt $OldFilesData)} | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -WhatIf -Verbose 4>&1 | Add-Content $Logfile
}
}
WriteLog "End profile cleanup script"
Аналогичным образом вы можете добавить в профиль пользователя другие папки, которые хотите очистить.
$clear_paths.
Полную версию скрипта смотрите в моем репозитории GitHub: https://github.com/maxbakhub/winposh/blob/main/RDS/CleanupUserProfile.ps1.
Этот сценарий PowerShell может запускаться после завершения сеанса RDP-сервера пользователя. Самый простой способ назначить сценарий — использовать политику GPO выхода из системы.
Создайте новый объект групповой политики и назначьте его организационной единице (OU), в которой расположены ваши узлы RDS;
Включите параметр «Настроить групповую политику пользователя» Режим обратной связи. Это необходимо для применения к компьютеру настроек из раздела «Пользователи»;
Дополнительные сведения см. в разделе «Почему групповая политика не применяется к компьютеру/пользователю».
Скопируйте файл сценария PowerShell в папку Net logon на контроллере домена (
\\active-directory.ru\netlogon\CleanupUserProfile.ps1Вы можете подписать код сценария PowerShell сертификатом, чтобы защитить его от несанкционированного изменения.
Перейдите в раздел GPO «Конфигурация пользователя» -> «Политики» -> «Настройки Windows» -> «Скрипты» -> «Выход из системы». Откройте вкладку Сценарии PowerShell и добавьте путь UNC к файлу PS1 в Netlogon;
Выйдите из системы Windows, чтобы применить новые настройки объекта групповой политики;
При завершении сеанса пользователя на RDS-сервере указанные папки будут автоматически очищены. Список удаленных файлов и папок можно просмотреть в текстовом файле журнала в профиле пользователя.
Вы также можете использовать следующие методы, позволяющие управлять размером профиля пользователя на серверах RDS Windows Server:
Как удалить старые профили пользователей?
Включить дисковые квоты NTFS
Обсуждаемые здесь методы очистки пользовательских папок могут применяться как к локально хранящимся профилям пользователей, так и к дискам профилей пользователей или контейнерам профилей FSlogix в Windows Server RDSH.






