Скрипт очистки временных файлов во всех профилях пользователей
Предлагаю вам скрипт для удаления временных файлов во всех профилях Windows:
Весьма удобно при использовании программ, поддерживающих удаленное выполнение скриптов.
Set fileObject = CreateObject("Scripting.FileSystemObject")
'Used to get a list of files in a folder
Function getFiles(folderName)
ReDim tempFileList(-1)
if (fileObject.folderExists(folderName)) then
set folderObject = fileObject.getFolder(folderName)
set files = folderObject.Files
m = 0
For Each file in files
ReDim Preserve tempFileList(UBound(tempFileList) + 1)
tempFileList(m)=file
m=m+1
Next
End if
getFiles = tempFileList
End Function
'Used to get a list of folders in a folder
Function getSubFolders(folderName)
ReDim tempList(-1)
if (fileObject.folderExists(folderName)) then
set folderObject = fileObject.getFolder(folderName)
set subFolders = folderObject.subFolders
i = 0
for each folder in subFolders
ReDim Preserve tempList(UBound(tempList) + 1)
tempList(i) = folder
i=i+1
next
end if
getSubFolders = tempList
End Function
'We need to detect the correct folder for user profiles
'since newer versions of windows place it under c:\users
Function getUserFolder()
if (fileObject.folderExists("C:\Users")) then
getUserFolder = "C:\Users"
else
getUserFolder = "C:\Documents and Settings"
end if
End Function
Function getTempFolders()
Dim profileList
Dim i
'Get our list of profile folders
profileList = getSubFolders(getUserFolder())
'Update them to point to the temp folder
for i=0 to UBound(profileList)
profileList(i)=profileList(i) & "\AppData\Local\Temp\"
next
getTempFolders = profileList
End Function
Dim profileList
ReDim folderList(-1)
ReDim fileList(-1)
'Get our list of temp folders
profileList = getTempFolders()
'Need k as our index for our final list
k=0
'Go through each folder and get a list of subfolders
for i=0 to UBound(profileList)
Dim tempList
tempList = getSubFolders(profileList(i))
for j=0 to UBound(tempList)
ReDim Preserve folderList(UBound(folderList) + 1)
folderList(k)=tempList(j)
k=k+1
next
next
k=0
'Now we add the root files too
for i=0 to UBound(profileList)
Dim tempFileList
tempFileList = getFiles(profileList(i))
for j=0 to UBound(tempFileList)
ReDim Preserve fileList(UBound(fileList) + 1)
fileList(k)=tempFileList(j)
k=k+1
next
next
On Error Resume Next
'Delete our folders
for i=0 to UBound(folderList)
Err.Clear
fileObject.DeleteFolder folderList(i),true
if (Err.Number<>0) then
WScript.Echo "Error deleting: " & folderList(i) & " (" & Err.Description & ")"
else
WScript.echo("Deleted: " & folderList(i))
end if
next
'Delete our files
for i=0 to UBound(fileList)
Err.Clear
fileObject.DeleteFile fileList(i),true
if (Err.Number<>0) then
WScript.Echo "Error deleting: " & fileList(i) & " (" & Err.Description & ")"
else
WScript.echo("Deleted: " & fileList(i))
end if
next
Весьма удобно при использовании программ, поддерживающих удаленное выполнение скриптов.
Но, при выходе из системы (перезагрузке или выключении), все элементы рабочего стола пропадают, отображаются лишь обои рабочего стола и курсор (которым можно двигать, он не зависает) – в этом положении комп может находиться долго и ничего не происходит, будто зависает.
Поэтому ищу иное решение, как можно было-бы автоматизировать очистку папок TEMP (думаю перед выходом из системы самый удобный момент для этого).
(У меня Windows 7)
1. Она и так чистится сама.
2. Планировщик Windows позволяет создавать задачи, которые будут реагировать на конкретные события, например вход или выход (возможно) юзера. Создаем batch или cmd скрипт с очисткой директории. Создаем задачу в планировщике, выбираем событие и скрипт.
3. Очистка при виходе из системы - очень плохая идея, т.к. идёт завершение сеанса, а вы хотите плодить задачи. Задача может быть завершена принудительно, не выполнив свою задачу или замедлить завершение работы.
1. У меня Windows 7. Что-то не заметил, чтобы со временем в папке TEMP уменьшалось количество файлов. Наоборот, со временем увидел только много лишних сотен Мб мусора.
2. «Создаем batch или cmd скрипт с очисткой директории» — могли бы рассказать пошагово? Я не программист. Могу делать лишь по инструкции пошагово.
Макс, да все просто. Гуглим "как удалить все файлы в каталоге через cmd". Также смотрим, какой ключ добавить к команде, чтобы пропускались файлы, которые не удаляются. Такие там точно есть. В принципе всё.
Создание задачи в планировщике также. "Как создать.." изучаешь по ходу, чтобы найти нужное событие.
Макс, да, думаю это нормальное решение. Но можно и по времени. Например каждую пятницу или пн в определенное время.
1. Открываем «Переменные среды»
2. Меняем переменные TEMP и TMP на – C:/Windows/Temp
3. Открываем любой текстовый редактор и вставляем данный код:Сохраняем файл в корне диска С, под любым именем, но с расширением .cmd, например: Сценарий очистки TEMP.cmd
4. Запустить файл, чтобы исполнить сценарий очистки папки TEMP (папка очистится от временных файлов).
Для автоматической очистки папки TEMP при входе в систему, нашёл такой способ:
1. Открываем «Переменные среды»
2. Меняем переменные TEMP и TMP на – C:/Windows/Temp
— и нажимаем «ОК» в окне «Переменные среды».
3. Открываем любой текстовый редактор и вставляем данный код:Сохраняем файл в корне диска С, под любым именем, но с расширением .cmd, например: Сценарий очистки TEMP.cmd
4. Запускаем редактор групповых политик: Пуск → Выполнить → вводим команду gpedit.msc
5. «Конфигурация компьютера» → «Конфигурация Windows» → «Сценарии» → «Автозагрузка» —
— «Добавить» → «Обзор» → «Сценарий очистки TEMP.cmd» (ищите там, где вы его разместили) → «ОК» → «ОК»
Подскажите как удалять файлы с рабочего стола пользователей?
Написал батник, но когда создаю в групповую политику и грубо говоря заливаю данный батник, то при выключение компьютера он не срабатывает, а когда запускаю отдельно скрипт, то он уделяет.
В GPO уже есть целая ветка управления рабочим столом, в том числе и его блокировка.
В какую ветку GPO вы указали батник? Возможно у пользователя нет прав его прочитать.
(hint!) А если вместо удаления запретить пользователям писать в папку Desktop?
Создал в лесу группу добавил пользователей, и применял к компьютеру и к конфигураций пользователей. может сценарий нужно создать. Что при выключений компьютера, запускать данный батник?
Вот сам батник:
@Echo off
shutdown -a
Echo "Внимание! Сейчас будет произведена очистка компьютера."
timeout 5 /NOBREAK
echo Поиск файлов и папок.
2>nul (for /f "eol=: tokens=*" %%i in ('WHERE /F /R C:\Users\%username%\Desktop\ *.doc, *.xls, *.pdf, *.tiff, *.jpg, *.xml., *.cvs, *.git, *.rtf, *.bmp, *.jpg, *.rar, *.zip, *.xmind') do del %%i)
echo Удаляем временные файлы системы.
del C:\Users\%username%\AppData\Local\Temp\* /S /Q
del C:\Users\%username%\Downloads\* /S /Q
del C:\Windows\Prefetch. /Q
del C:\Windows\Temp. /Q
del C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent\* /S /Q
del /F /S /Q "C:\Users\%Username%\AppData\Local\Microsoft\Windows\Temporary Internet Files\*"
shutdown -s -f -t 0
exit /b
shutdown -s -f -t 0 — моментальное форсированное выключение. И вы хотите, что бы что-то удалилось, но времени на это не оставили.
Системное администрирование и автоматизация бизнеса
ЗАДАЧА: Очистить систему от временных файлов.
Несмотря на нехватку времени, я стараюсь хотя бы раз в неделю выкладывать сюда новые интересные решения каких-то задач, с которыми в той или иной мере сталкиваются в повседневной жизни как обычные пользователи компьютеров, так и профессионалы околокомпьютерных технологий.
Сегодня я поделюсь с вами решением задачи, как доверить самому компьютеру ежедневную очистку системы от различного рода файлового “мусора”, который появляется в процессе работы в различного рода специально для этого создаваемых файловых каталогах. Люблю я просто, когда в системе присутствует порядок и когда от меня лично зависит максимум эффективности её работы.
Если ваш компьютер является системой фирменной фабричной сборки, то отчасти такое решение в нём уже возможно реализовано сборщиками этой системы.
Но скорее всего, такое решение, даже если оно уже присутствует, реализовано только отчасти.
Потому что я предлагаю чистить ТЕМР-каталоги компьютера не только от имени конкретного пользователя, но вообще все временные каталоги всех существующих на этом компьютере профилей пользователей. И делаться это будет от имени администратора.
Особенно полезным такое решение может быть для системных алминистраторов, которым приходится обслуживать файловые серверы.
Ведь у сервера, как правило, больше всего пользователей его ресурсов, и для каждого терминального пользователя создаётся некая временная виртуальная среда (сессия), включающая в себя кроме реестровых записей ещё и временные каталоги и файлы, образующиеся во время конкретного сеанса работы этого пользователя. Формально сервера обычно настраиваются сисадминами сразу же на очистку подобных временных записей. Но учитывая возможные внеплановые остановки и прекращения работы сервера, и связанные с этим незакрытые сеансы работы пользователя, подобные файлы “мусора” могут оставаться в системе, и в результате через какое-то время они могут забирать у сервера достаточно большой объём дискового пространства. Могут даже полностью забить диск сервера. А ведь дискового пространства на серверах как правило и так всегда не хватает.
Вот именно решение этой проблемы ежедневной принудительной чистки системы от временных файлов и каталогов я и решил поручить самому компьютеру. Ну и т.к. я не скрываю того, что сейчас я плотно занимаюсь изученим возможностей новых операционных систем компьютера, а именно WINDOWS 7 и 8, а также их серверные вариации WINDOWS 2008 и 2012, то своё решение данной задачи я доверил встроенным в эти системы программме скриптотехнологий PowerShell. Если что, то сразу сообщаю о том, что WINDOWS XP и WINDOWS 2003 я освоил очень хорошо намного раньше, и даже имею на эту тему международные сертификаты. Да и предыдущая моя работа на предприятии в системе госкорпорации “РОСТЕХНОЛОГИИ” по их приглашению в принципе уже как-то тоже отчасти говорит о возможном моём уровне.
Так что в какой-то мере в данный момент я просто системно пополняю свои знания из-за того, что в силу жизненных обстоятельств я на некоторое время выпадал из системного получения этих знаний в последнии 2-3 года.
Итак… Первое, что я сделал это реализовал сам скрипт очистки необходимых каталогов.
ForEach ($Path in $OtherCleanPathsArr) Remove-Item -Path $Path -Recurse -Force -ErrorAction SilentlyContinue -WhatIf
>
ForEach ($Profile in $Profiles) ForEach ($Path in $InProfilesCleanPathsArr) Remove-Item -Path $Profile$Path -Recurse -Force -ErrorAction SilentlyContinue -WhatIf
>
>
Этот скрипт уже абсолютно рабочий и его можно попробовать запустить отдельно.
Надо только учесть то, что в настоящий момент работа скрипта предполагает его имитацию.
Для того, чтобы этот скрипт начал работать в реальных условиях чистки диска, надо убрать во всех последних строках цикловой реализации скрипта параметр -WhatIf. Данный параметр в этом скрипте присутствует в двух строках.
Легко заметить что при всей простоте этого скрипта в нём реализовано сразу 3 алгоритма очистки временных каталогов системы.
1. В первой строке явно прописаны пути к основным известным временным каталогам. Администратор системы имеет возможность добавить в эту строку пути к каким-то своим каталогам, которые также требуют периодической очистки.
2. В третьей строке скрипта прямо указаны пути к временным каталогам конкретного профиля… пользователя. Здесь также можно добавить свои пути.
3. Далее система сама запрашивает в реестре пути к временным записям всех существующих в системе профилей и по специально организуемому циклу перебирает все каталоги и очищает их от временных файлов.
Ну и далее осталось только автоматизировать запуск этого скрипта в системе без участия администратора.
Я реализовал это через использование готового модуля от известного расширения к PowerShell под названием PowerShellPack.
По указанной ссылке надо скачать сам этот пакет и установить его в систему с PowerShell.
Дальнейшее подключение функций этого модуля к программе реализуется через командлет Import-Module TaskScheduler
Саму работу скрипта со встроенным в WINDOWS шедулером я здесь описывать не буду, т.к. считаю то, что необходимый минимум знаний работы PowerShell – скриптов у администратора должен всё-таки уже быть, и в этом случае он будет иметь собственный интерес самостоятельно разобраться в работе скрипта с шедулером.
Поэтому ниже я просто публикую полную окончательную рабочую реализацию скрипта, один запуск которого в системе полностью автоматизирует очистку системы от “мусора” на все будущиее дни.
ForEach ($Path in $OtherCleanPathsArr) Remove-Item -Path $Path -Recurse -Force -ErrorAction SilentlyContinue
>
ForEach ($Profile in $Profiles) ForEach ($Path in $InProfilesCleanPathsArr) Remove-Item -Path $Profile$Path -Recurse -Force -ErrorAction SilentlyContinue
>
>
> |
Add-TaskTrigger -Daily -At “9:00 PM” |
Add-TaskTrigger -OnRegistration |
Register-ScheduledTask “ClearProfileTemp”
Как видно из текста самого этого скрипта, запускаться он будет ежедневно в одно и то же время. В моём случае это 21=00 мск.
В окончательно реализации скрипта я уже убрал параметр -WhatIf, имитирующий его работу, и этот скрипт уже полностью рабочий.
Мне остаётся только добавить то, что данная версия скрипта очистки системы от временных файлов расчитана в основном на клиентские компьютеры.
В серверной же реализации этого скрипта я добавил в него также возможность очистки реестра и его дефрагментацю, и ещё добавил возможность отсылки отчёта о проделанной на сервере работе на e-mail дминистратора.
Ну вобщем всем удачи! И прекрасного настроения. 😉
А я продолжу реализовывать решения многих задач системной автоматизации, которые встают передо мной уже сегодня.
Как вы удаляете временные файлы? Вручную запускаете CCleaner или аналогичную программу, либо настроили ее запуск по расписанию? Я обхожусь встроенными средствами Windows, причем все сводится буквально к одной команде. Я хочу поделиться с вами двумя скриптами, которые давно служат мне верой и правдой для удаления ненужных файлов.
В Windows 7 имеется утилита для очистки диска, которую можно настроить для удаления заданных категорий файлов по расписанию . Она легко справится с очисткой временных файлов из расположений, известных системе, но не позволит удалять ненужные файлы из заданной вами папки. С помощью скриптов можно очищать не только временные файлы, но и любую папку. Например, я удаляю файлы из папок Test и Temp, которые служат для экспериментов и временного хранения файлов как в загрузках, так и документах.
В отличие от программных чистильщиков, скрипты можно гибко настроить, а регулярность выполнения очистки легко реализовать с помощью планировщика заданий Windows.
ВНИМАНИЕ! ВСЕ СКРИПТЫ ВЫ ИСПОЛЬЗУЕТЕ НА СВОЙ СТРАХ И РИСК. Автор за использование скриптов ответственности не несет.
Скрипты
Вы можете воспользоваться на выбор скриптами CMD, VBS и PowerShell.
Можно использовать утилиту командной строки forfiles.exe, входящую в состав Windows 7 (когда-то она входила в Windows 2000 Resource Kit). Одной командой удаляются все файлы из указанной папки и вложенных в нее.
Команда для выполнения
- Вместо %temp% (временной папки в профиле) подставьте свою папку (параметр /p)
- Возраст файлов по умолчанию 14 дней (параметр /d), но вы можете задать любое значение
- Можно удалять файлы определенного расширения по маске (например, /m *.log)
- За рекурсивное удаление (во вложенных папках) отвечает параметр /s
Конечно, в скрипте вы можете использовать несколько команд, каждая из которых будет удалять заданную папку. Справка по использованию утилиты вызывается командой forfiles /?.
Приведенный ниже скрипт VBS удаляет все файлы и папки, включая защищенные, с выводом списка удаленных файлов.
Читайте также: