繁体   English   中英

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

[英]Delete temp files on logout with GPO

我知道标题几乎可以用“磁盘清理”来概括。 我已经看过通过脚本和Powershell(我不太了解)以及Task Scheduler来使用GPO部署DiskCleanup,但是在注销/重新启动/关闭时DiskCleanup永远不会运行或不执行任何操作。 临时文件和Windows Update文件继续保持原样。

我试图将一个脚本附加到我认为可以运行的注销中,但是从不删除任何内容。 它所做的只是将注销时间延长5分钟。 相当的令人惊讶。

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

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

谢谢,

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

@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 XP以来未更改)。 (我怀疑这是由Windows 8、8.1和10的用户完成的,因为这些Windows上的默认设置是休眠状态,并且在按电源按钮时不会关闭。)

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

注意:

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

我碰到过一次,创建了一个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM