This script empty every trash of the system, remove old account listed by AccountsToDelete variable and delete main temp files of every users.

Useful when someone complains about “disk space” on a computer shared by several users.

But be careful! This script is quite straightforward and is not still fully tested.

Put autoit3.exe and autoit3 Include\ dir in CLIENT_CONFIG dir.

once.ins:

[Actions]
 
DefVar $ProductId$
DefVar $INST_NTVersion$
DefVar $TmpSuffix$
DefVar $AccountsToDelete$
 
Set $ProductId$ = "cleanup"
 
; list of accounts to delete separated by a '|' 
Set $AccountsToDelete$ = "old_user2|old_user1"
 
Set $INST_NTVersion$ = GetMsVersionInfo
 
ShowBitmap "%ScriptPath%\"  + $ProductId$ + ".png" $ProductId$
 
if ($INST_NTVersion$ >= "6")
    Set $TmpSuffix$ = "AppData\Local\Temp"
else
    Set $TmpSuffix$ = "Local Settings\Temp"
endif
 
 
Message "Remove unused account files. Please wait a while."
ExecWith_account "%ScriptPath%\AutoIt3.exe"
 
Message "Purge Trash bins. Please wait a while."
DOsInAnIcon_trash
 
Message "Remove tmp files. Please wait a while."
ExecWith_temp "%ScriptPath%\AutoIt3.exe"
 
 
 
 
 
[DOsInAnIcon_trash]
rd /S /Q %SystemDrive%\$Recycle.Bin
 
 
 
[ExecWith_account]
#include <File.au3> 
 
Local $AccountsToDelete = StringSplit("$AccountsToDelete$", "|")
Local $AccountDir = "%ProfileDir%"
 
$DirList = _FileListToArray($AccountDir, "*", 2) 
 
If IsArray($DirList) == 0 Then     
    ;MsgBox(0, "", "No Folders Found.")     
    ConsoleWrite("No Folders Found in dir " & $AccountDir & @CRLF)
    Exit 
EndIf 
 
For $i = 1 To $DirList[0]     
    Local $CurrentAccount = $DirList[$i]
    ConsoleWrite("Check " & $CurrentAccount) 
    For $j = 1 To $AccountsToDelete[0]
        Local $AccountToDelete = $AccountsToDelete[$j]
        ;ConsoleWrite(":" & $CurrentAccount & ":" & $AccountToDelete & ":" & @CRLF)
        If $CurrentAccount == $AccountToDelete Then
            ConsoleWrite(": delete it")
            DirRemove($AccountDir & "\\" & $CurrentAccount, 1)
            ExitLoop
        EndIf
    Next
    ConsoleWrite(@CRLF)
Next
 
 
 
[ExecWith_temp]
; remove only content of temp dir
#include <File.au3> 
 
Local $ProfileDir = "%ProfileDir%"
Local $TmpSuffix = "$TmpSuffix$"
 
Local $DirList = _FileListToArray($ProfileDir, "*", 2) 
 
If @error = 1 Then     
    ConsoleWrite("No Folders Found in dir " & $ProfileDir & @CRLF)
    Exit 
EndIf 
 
For $i = 1 To $DirList[0]     
    Local $CurrentAccount = $DirList[$i]
    Local $TmpDir = $ProfileDir & "\" & $CurrentAccount & "\" & $TmpSuffix
    ConsoleWrite("Delete tmp files of " & $TmpDir & @CRLF)
 
    Local $FileList = _FileListToArray($TmpDir, "*") 
    If IsArray($FileList) == 0 Then     
        ConsoleWrite("  no tmp file found" & @CRLF)
        ContinueLoop
    EndIf 
    ConsoleWrite("  nb of files or folders : " & $FileList[0] & @CRLF)
    For $j = 1 To $FileList[0]
        Local $TmpFile = $TmpDir & "\" & $FileList[$j]
        ;ConsoleWrite("  remove file: " & $tmpFile & @CRLF)
        DirRemove($TmpFile, 1)
        FileDelete($TmpFile) 
   Next
   ConsoleWrite(@CRLF)
Next