清除用户配置文件(RDS)中的缓存和临时文件

1.概要:

Windows Server RDS场管理员经常面临由于大量用户数据而导致系统驱动器空间不足的问题。本文介绍如何使用PowerShell和组策略自动清理Windows上用户配置文件中的回收站、下载、临时和缓存文件夹。

2.操作步骤/更多信息:

2.1 自动清理临时文件夹和下载文件夹

可以使用内置的存储感知功能自动删除Windows操作系统上的旧文件和临时文件。

2.2 清空Windows用户的回收站

默认情况下,Windows主机已启用回收站文件夹($Recycle.Bin)。在RDS服务器上的这个目录中,为每个用户创建一个单独的回收站文件夹(以用户的SID为名称)。随着时间的推移,所有用户的回收站中的文件总大小将在RDS主机上占用大量的磁盘空间。

Windows 中回收站的默认大小约为磁盘大小的 5%。您可以在每个驱动器的属性中更改回收站的最大大小。在这里,您还可以使用“不要将文件移动到回收站”选项完全禁用回收站。但是,这只会更改当前用户的回收站设置。

Windows中回收站的默认大小约为磁盘大小的5%。可以在回收站的属性中改变回收站的最大尺寸。也可以使用不要将文件移到回收站中选项完全禁用回收站,但这会改变当前用户的回收站设置。

可以使用“用户配置”->“管理模板”->“Windows组件”->“文件资源管理器”下的“允许的最大回收站大小”组策略选项为用户设置最大回收站大小。最大回收站的大小是以磁盘大小的百分比来设置的。将此设置为0,可以禁用所有驱动器上的回收站。

可以使用PowerShell命令Clear-RecycleBin清空回收站。为了在不提示的情况下清空回收站,请运行以下命令:

Clear-RecycleBin -Force

如果在RDS主机上以普通用户身份运行此命令,则只会清除当前用户的回收站。可以将以下命令添加到GPO注销脚本中,以便在用户注销时清除回收站。

%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command Clear-RecycleBin -Confirm:$false

2.3 使用PowerShell清除用户配置文件中的缓存、临时文件夹和下载文件夹

可以使用PowerShell脚本来清理用户配置文件中的缓存、下载文件夹和其他的临时文件夹。

脚本注释:

  • 删除下载文件夹中超过14天的文件(可以改变这个选项),其他带有缓存和临时文件的文件夹将被完全清空。
  • 脚本在当前用户环境下运行(当用户从Windows注销时,脚本作为GPO注销脚本运行,并删除旧文件)。
  • 所有关于删除文件的信息将被保存到一个文本日志文件中(可以测试完成用户调试脚本后禁用它)。
  • 它还会清理RDP连接历史和缓存。
  • 用户配置文件中的Windows错误报告(WER)文件夹被清理。
  • 可以添加一个额外的操作来检查清理前后用户配置文件文件夹的当前大小(它可以得到更准确的信息,但需要一些时间),或者可以简单地检查前后的可用磁盘空间(它可以很快完成)。
$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'

)

# 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"

# 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服务器会话结束时运行,分配脚本的最简单方法是使用注销GPO策略。