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

时间:2015-12-03 18:03:16

标签: powershell batch-file delete-file temp gpo

我知道标题几乎可以用磁盘清理来概括。我已经看过通过脚本和powershell(我知道的很少)以及任务调度程序部署DiskCleanup和GPO,但是在注销/重启/关闭时DiskCleanup从不运行或做任何事情。临时文件和Windows Update文件将继续保持原样。

我试图将一个脚本附加到我认为运行的注销,但是从不删除任何东西。它只是将注销时间延长了5分钟。非常介意。

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

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

谢谢,

2 个答案:

答案 0 :(得分:1)

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

@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磁盘清理默认情况下仅删除7天以前的文件和文件夹(如果自Windows XP以来没有更改)“希望”用户在过去7天内至少重启过一次Windows。 (我怀疑这是由Windows 8,8.1和10的用户完成的,因为这些Windows上的默认设置是休眠状态,而不是按下电源按钮时关闭。)

因此,在登录后运行此批处理文件会更好一些,最好在大多数应用程序启动之前运行。但是,已经启动的进程当前使用的临时文件和文件夹将被 DEL RD 跳过。如果在Windows注册表中设置了挂起的重命名操作,则最好检查批处理文件,并且只有在此时没有定义挂起的重命名操作时才进行清理。

注意:

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

答案 1 :(得分:0)

我遇到过这一次并创建了一个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