Borrar caché y archivos temporales en perfiles de usuario en Windows (RDS) con PowerShell y GPO
Los administradores de la granja de Windows Server RDS a menudo se enfrentan al problema de quedarse sin espacio en una unidad del sistema debido a una gran cantidad de datos de usuario. Este artículo le muestra cómo usar PowerShell y las políticas de grupo para limpiar automáticamente las carpetas Papelera de reciclaje, Descargas, Temporal y Caché en los perfiles de usuario en Windows.
Limpie automáticamente las carpetas temporales y de descarga con el espacio de almacenamiento de Windows
Puede usar la función Storage Sense integrada para eliminar automáticamente archivos antiguos y temporales en Windows Server 2019/2022 y Windows 10/11. Tiene opciones especiales de GPO que le permiten limpiar las carpetas temporales y de descargas.
¿Cómo vaciar la papelera de reciclaje para usuarios de Windows?
De forma predeterminada, la carpeta Papelera de reciclaje (
$Recycle.Bin) para archivos eliminados está habilitado en un host de Windows. Se crea una carpeta Papelera de reciclaje individual para cada usuario en este directorio (con el SID del usuario como nombre) en el servidor RDS. Con el tiempo, encontrará que el tamaño total del archivo en las papeleras de reciclaje de todos los usuarios ocupará una cantidad significativa de espacio en disco en el host RDS.
El tamaño predeterminado de la Papelera de reciclaje en Windows es aproximadamente el 5 % del tamaño del disco. Puede cambiar el tamaño máximo de la Papelera de reciclaje en cada unidad en sus propiedades. Aquí también puede deshabilitar la Papelera de reciclaje por completo usando la opción No mover archivos a la Papelera de reciclaje. Sin embargo, esto solo cambiará la configuración de la papelera de reciclaje para el usuario actual.
Puede establecer el tamaño máximo de la papelera de reciclaje para los usuarios con la opción Tamaño máximo permitido de la papelera de reciclaje GPO en Configuración de usuario -> Plantillas administrativas -> Componentes de Windows -> Explorador de archivos. El tamaño máximo de la papelera de reciclaje se establece como un porcentaje del tamaño de su disco. Establecer esto en 0 deshabilita la papelera de reciclaje en todas las unidades.
Para vaciar la papelera de reciclaje en Windows, puede usar el cmdlet Clear-RecycleBin (disponible en PowerShell 5.1 y posterior en Windows 10). Para vaciar la Papelera de reciclaje sin preguntar, ejecute el siguiente comando:
Clear-RecycleBin -ForceSi ejecuta este comando como un usuario común en un host RDS, solo se borrará la papelera de reciclaje del usuario actual. Puede agregar este comando a sus secuencias de comandos de cierre de sesión de GPO para borrar la papelera de reciclaje cuando un usuario cierra la sesión:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command Clear-RecycleBin -Confirm:$falsePara versiones anteriores de Windows (con versiones anteriores de PowerShell), puede usar el siguiente código para limpiar la Papelera de reciclaje:
$Shell = New-Object -ComObject Shell.Application
$RecycleBin = $Shell.Namespace(0xA)
$RecycleBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}Borrar las carpetas Caché, Temporal y Descargas en el perfil de usuario con PowerShell
Consideremos un script de PowerShell para limpiar Temp, Descargas y algunas otras carpetas temporales en un perfil de usuario en un Windows Server RDS o una computadora de escritorio que ejecuta Windows 10/11.
Comentarios del guión:
-
En este ejemplo, eliminaremos los archivos que tengan más de 14 días en la carpeta Descargas (puedes cambiar esta opción). Otras carpetas con caché y archivos temporales estarán completamente vacías;
La secuencia de comandos se ejecuta en el contexto del usuario actual (la secuencia de comandos elimina los archivos antiguos cuando un usuario cierra sesión en Windows y se ejecuta como una secuencia de comandos de cierre de sesión de GPO);
Si se utiliza en un entorno RDS, asegúrese de que los usuarios hagan clic en el botón Cerrar sesión/Iniciar sesión para finalizar sus sesiones. También recomendamos configurar los tiempos de espera de sesión de RDS para finalizar automáticamente las sesiones después de un período de inactividad.
Toda la información sobre los archivos eliminados se guardará en un archivo de registro de texto (puede desactivar esto después de depurar el script en los usuarios de prueba);
También limpiará el historial y la memoria caché de la conexión RDP;
Se limpia la carpeta Informe de errores de Windows (WER) en un perfil de usuario;
Las líneas que borran el caché de Google Chrome están comentadas en el script. Si tus usuarios lo usan y la caché de Chrome ocupa mucho espacio, descomenta las líneas con las rutas;
Puede agregar una operación adicional para verificar el tamaño actual de la carpeta del perfil de usuario antes y después de la limpieza (le permite obtener información más precisa, pero lleva algo de tiempo). O simplemente puede verificar el espacio libre en disco antes y después (se hace rápidamente).
# 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"
De manera similar, puede agregar otras carpetas que desee borrar en un perfil de usuario para
$clear_paths.
Consulte mi repositorio de GitHub para obtener la versión completa del script: https://github.com/maxbakhub/winposh/blob/main/RDS/CleanupUserProfile.ps1.
Este script de PowerShell puede ejecutarse cuando finaliza la sesión del servidor RDP del usuario. La forma más fácil de asignar un script es usar la directiva GPO de cierre de sesión.
Cree un nuevo GPO y asígnelo a la Unidad organizativa (OU) en la que se encuentran sus hosts RDS;
Habilite la opción Configurar directiva de grupo de usuario Modo de procesamiento de bucle invertido. Esto es necesario para aplicar la configuración de la sección Usuarios a la computadora;
Consulte Por qué la política de grupo no se aplica a una computadora/usuario para obtener más información.
Copie el archivo de script de PowerShell en la carpeta de inicio de sesión de red en su controlador de dominio (
\\a-d.site\netlogon\CleanupUserProfile.ps1);
Puede firmar el código de secuencia de comandos de PowerShell con un certificado para protegerlo de modificaciones no autorizadas.
Vaya a la sección GPO Configuración de usuario -> Políticas -> Configuración de Windows -> Scripts -> Cerrar sesión. Abra la pestaña PowerShell Scripts y agregue una ruta UNC al archivo PS1 en Netlogon;
Cierre la sesión del usuario de Windows para aplicar la nueva configuración de GPO;
Al finalizar una sesión de usuario en un servidor RDS, las carpetas especificadas se borrarán automáticamente. Puede ver una lista de archivos y carpetas eliminados en un archivo de registro de texto en un perfil de usuario.
También puede usar los siguientes métodos que permiten administrar el tamaño del perfil de usuario en los servidores RDS de Windows Server:
¿Cómo eliminar perfiles de usuario antiguos?
Habilitar cuotas de disco NTFS
Los métodos de limpieza de carpetas de usuario que se analizan aquí se pueden aplicar tanto a perfiles de usuario almacenados localmente como a discos de perfil de usuario o contenedores de perfil FSlogix en Windows Server RDSH.






