使用 GPO 在注销时删除临时文件

Delete temp files on logout with GPO

我知道标题几乎可以用磁盘清理来概括。我已经研究过通过脚本和 powershell(我知道的很少)以及任务计划程序使用 GPO 部署 DiskCleanup,但是在 logout/restart/shutdown DiskCleanup 上从来没有 运行s 或做任何事情。临时文件和 Windows 更新文件继续保留在原处。

我曾尝试将脚本附加到我认为 运行 的注销,但也从未删除任何内容。它所做的只是将注销时间延长 5 分钟。相当令人兴奋。

@echo off
del /s /f /q "%userprofile%\AppData\Local\Temp\*"

我还没有充实所有需要删除的内容,但是任何想法或想法将不胜感激。磁盘清理也不需要一直 运行,只需每周一次,因为我们在安全措施方面尽可能让我们的机器保持最新状态。我尝试了该脚本,因为我还认为它比应用程序 运行ning 更快。我还需要为大约 150 台机器部署解决方案。

谢谢,

我 运行 进入过一次并创建了一个 bat 文件并将其放入用户的启动文件夹中,以便每次启动时将其清除。不过,这并不能回答您的 GPO 问题。该脚本查找所有临时目录。去掉最后的@pause 就看不到结果了。

@echo off

echo.
rem  ****************************************************************
rem  *** This file will clean a users temp directories            ***
rem  ****************************************************************
echo.
echo ********************************************
echo     Starting Search For temp Directories
echo ********************************************
echo.


cd %temp%
rd /S /Q %temp%
echo Cleaned out %temp% Directory
echo.
echo.


IF EXIST c:\Temp GOTO rootTemp
echo c:\Temp Not Found
echo.
echo.


:nextTemp
IF EXIST c:\windows\Temp GOTO winTemp
echo c:\windows\Temp Not Found
GOTO endTemp


:rootTemp
cd c:\Temp
rd /S /Q c:\temp

echo Cleaned out c:\Temp Directory
echo.
echo.
GOTO nextTemp



:winTemp
cd c:\windows\Temp
rd /S /Q c:\windows\temp
echo Cleaned out c:\windows\Temp

GOTO endTemp




:endTemp

echo.
echo ********************************************
echo       End Clean up of Temp Directories     
echo ********************************************
echo.
@pause

我建议使用包含以下行的批处理文件:

@echo off
rem Delete all files and subfolders in directory for temporary files
rem of current user account, but keep the directory itself. Temporary
rem files and subdirectories currently in use are silently ignored.
del /F /Q "%TEMP%\*" 2>nul
for /D %%D in ("%TEMP%\*") do rd /Q /S "%%~D" 2>nul

rem Do the same as above for system temporary files directory.
rem This cleanup requires administrator privileges.
del /F /Q "%windir%\Temp\*" 2>nul
for /D %%D in ("%windir%\Temp\*") do rd /Q /S "%%~D" 2>nul

但是这个批处理文件不应在注销或关机时执行。

许多应用程序安装程序将自身解压缩到临时文件目录的子目录中以安装或更新应用程序。如果应用程序已经安装并且一个或多个文件由于当前正在使用而无法更新,例如 shell 扩展 DLL,安装程序会将文件保留在临时文件目录中并将挂起的重命名添加到 Windows 用于使用移动操作将临时文件目录中的文件替换正在使用的文件的注册表。此挂起的重命名(移动)操作由 Windows 在下次重新启动时执行。

因此,在注销或关机期间删除所有文件和子目录是不可取的,因为它可能只更新部分应用程序。

Windows 磁盘清理默认仅删除用户已重新启动的 "hope" 中超过 7 天的文件和文件夹(如果自 Windows XP 以来未更改)Windows 在最近 7 天内至少一次。 (我怀疑这是由使用 Windows 8、8.1 和 10 的用户完成的,因为这些 Windows 的默认设置是休眠状态,按下电源按钮时不会关机。)

所以最好在登录后 运行 这个批处理文件,最好在大多数应用程序启动之前。但是,DELRD 会跳过已启动进程当前使用的临时文件和文件夹。如果在 Windows 注册表中设置了挂起的重命名操作,最好是签入批处理文件,并且仅当目前没有定义挂起的重命名操作时才进行清理。

注:

根据我的经验,仅使用 rd /Q /S "%TEMP%" 并不是一个好主意,因为此命令还会删除临时文件目录本身。永远不要这样做,即使是暂时的。在成功完全删除后重新创建目录不是好的解决方法,因为 NTFS 权限可能与以前不同。