
Администраторы ферм Windows Server RDS часто сталкиваются с проблемой нехватки места на системном диске из-за большого количества пользовательских данных. В этой статье показано, как использовать PowerShell и групповые политики для автоматической очистки папок Recycle Bin, Downloads, Temp и Cache в пользовательских профилях на Windows.
Автоматическая очистка папок Temp и Download с помощью Windows Storage Space
Вы можете использовать встроенный Storage Sense функция автоматического удаления старых и временных файлов на Windows Server 2019/2022 и Windows 10/11. Она имеет специальные параметры GPO, позволяющие очищать папки Temp и Downloads.
Как очистить корзину для пользователей Windows?
По умолчанию папка корзины ($Recycle.Bin
) для удаленных файлов включена на хосте Windows. Для каждого пользователя создается отдельная папка Recycle Bin в этом каталоге (с 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
$Shell = New-Object -ComObject Shell.Application
$RecycleBin = $Shell.Namespace(0xA)
$RecycleBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}
Очистка папок Cache, Temp и Downloads в профиле пользователя с помощью PowerShell
Рассмотрим сценарий PowerShell для очистки папок Temp, Downloads и некоторых других временных папок в профиле пользователя на Windows Server RDS или настольном компьютере под управлением Windows 10/11.
Комментарии к сценарию:
- В этом примере мы удалим файлы старше 14 дней в папке Downloads (этот параметр можно изменить). Другие папки с кэшем и временными файлами будут полностью пусты;
- Сценарий запускается в контексте текущего пользователя (сценарий удаляет старые файлы, когда пользователь выходит из Windows, и запускается как сценарий выхода из GPO);
При использовании в среде RDS убедитесь, что пользователи нажимают кнопку Logout/Login для завершения сеанса. Мы также рекомендуем настроить таймауты сеансов RDS, чтобы сеансы автоматически завершались после определенного периода бездействия.
- Вся информация об удаленных файлах будет сохраняться в текстовом файле журнала (вы можете отключить эту функцию после отладки сценария на тестовых пользователях);
- Также будет очищена история и кэш RDP-соединений;
- Очищается папка Windows Error Reporting (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
.
Этот сценарий PowerShell может запускаться при завершении сеанса RDP-сервера пользователя. Самый простой способ назначить сценарий — использовать политику logoff GPO.
- Создайте новый GPO и назначьте его организационной единице (OU), в которой расположены ваши хосты RDS;
- Включите опцию Настроить групповую политику пользователя Режим обработки шлейфа. Это необходимо для применения настроек из раздела Пользователи к компьютеру; Дополнительные сведения см. в разделе Почему групповая политика не применяется к компьютеру/пользователю.
- Скопируйте файл сценария PowerShell в папку Net logon на контроллере домена (
\\woshub.com\netlogon\CleanupUserProfile.ps1
);Вы можете подписать код сценария PowerShell сертификатом, чтобы защитить его от несанкционированного изменения. - Перейдите в раздел GPO User Configuration -> Policies -> Windows Settings -> Scripts -> Logoff. Откройте раздел Сценарии PowerShell вкладку и добавьте UNC-путь к файлу PS1 в Netlogon;
Выйдите из Windows, чтобы применить новые параметры GPO;
- При завершении сеанса пользователя на сервере RDS указанные папки будут автоматически очищены. Список удаленных файлов и папок можно просмотреть в текстовом файле журнала в профиле пользователя.
- Как удалить старые профили пользователей?
- Включение дисковых квот NTFS
Рассмотренные здесь методы очистки пользовательских папок можно применять как к локально хранящимся пользовательским профилям, так и к дискам пользовательских профилей или контейнерам профилей FSlogix на Windows Server RDSH.