Удаление временных данных ОС Windows

Удаление временных данных ОС Windows

Для экономии места на дисках, можно автоматически очищать ОС от временных данных.

Написал небольшой скрипт, который удаляет временные данные ОС с системного диска и профилей пользователей.

Скрипт

Скрипт представляет собой комплект приложения и задачи для импорта в планировщик задач ОС #Windows.

Установка

  • Скопировать файл app.temp.cleanup.ps1 в директорию C:\Scripts\.
  • Импортировать задания task.temp.cleanup.xml в Windows Task Scheduler, откорректировать параметры задачи.

Приложение

Скрипт забирает список профилей пользователей из реестра и удаляет в них временные данные. Следующие переменные можно откорректировать под задачу:

  • $SystemTemp - системные директории с временными данными.
  • $ProfileTemp - директории с временными данными в профилях пользователей.
  • $ProfileExclude - исключить профили пользователей из сканирования.
app.temp.cleanup.ps1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
<#PSScriptInfo
.VERSION      0.1.0
.GUID         f5e8380e-4e2f-4c58-972e-a60ace8dee8e
.AUTHOR       Kai Kimera
.AUTHOREMAIL  mail@kai.kim
.COMPANYNAME  Library Online
.COPYRIGHT    2024 Library Online. All rights reserved.
.TAGS         windows temp cleanup
.LICENSEURI   https://choosealicense.com/licenses/mit/
.PROJECTURI   https://lib.onl/ru/2024/09/aaef951a-9caf-5765-8189-c91f3f305821/
#>

<#
.SYNOPSIS
Script for deleting temporary data.

.DESCRIPTION
The script deletes data in the specified directories.

.EXAMPLE
.\app.temp.cleanup.ps1

.LINK
https://lib.onl/ru/2024/09/aaef951a-9caf-5765-8189-c91f3f305821/
#>

# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURATION
# -------------------------------------------------------------------------------------------------------------------- #

$SystemTemp = @(
  "C:\Windows\Temp\*"
)

$ProfileTemp = @(
  "AppData\Local\Temp\*"
  "AppData\Local\Mozilla\Firefox\Profiles\*.default-release\cache2\entries\*"
  "AppData\Local\Microsoft\Windows\Explorer\*"
  "AppData\Roaming\Mozilla\Firefox\Profiles\*.default-release\storage\default\*"
  "AppData\Local\Google\Chrome\User Data\Default\Service Worker\CacheStorage\*"
  "AppData\Local\Google\Chrome\User Data\Default\Cache\Cache_Data\*"
  "AppData\Local\Google\Chrome\User Data\Default\Code Cache\js\*"
  "AppData\LocalLow\Adobe\Acrobat\DC\ConnectorIcons\*"
  "AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\*"
)

$ProfileExclude = @(
  'Администратор'
  'Administrator'
  'Setup'
  'Public'
  'All Users'
  'Default User'
)

$ProfileList = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
$Profiles = Get-ChildItem (Get-ItemProperty -Path "${ProfileList}").ProfilesDirectory -Exclude $ProfileExclude

# -------------------------------------------------------------------------------------------------------------------- #
# INITIALIZATION
# -------------------------------------------------------------------------------------------------------------------- #

function Start-Script() {
  Start-CleanUp
}

# -------------------------------------------------------------------------------------------------------------------- #
# CLEANUP
# -------------------------------------------------------------------------------------------------------------------- #

function Start-CleanUp() {
  ForEach ($Path in $SystemTemp) {
    Remove-Data -Path "${Path}"
  }

  ForEach ($Profile in $Profiles) {
    ForEach ($Path in $ProfileTemp) {
      $Path = (Join-Path -Path "${Profile}" -ChildPath "${Path}")
      if (Test-Path -Path "${Path}") { Remove-Data -Path "${Path}" }
    }
  }
}

# -------------------------------------------------------------------------------------------------------------------- #
# ------------------------------------------------< COMMON FUNCTIONS >------------------------------------------------ #
# -------------------------------------------------------------------------------------------------------------------- #

function Remove-Data() {
  param(
    [string]$Path
  )

  Remove-Item -Path "${Path}" -Recurse -Force -ErrorAction 'SilentlyContinue'
}

# -------------------------------------------------------------------------------------------------------------------- #
# -------------------------------------------------< RUNNING SCRIPT >------------------------------------------------- #
# -------------------------------------------------------------------------------------------------------------------- #

Start-Script

Задача

Для того, чтобы скрипт выполнялся автоматически по расписанию, я сделал XML-файл задачи. Его необходимо импортировать в планировщик задач Windows и откорректировать под свои требования:

task.temp.cleanup.xml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Description>Script for deleting temporary data.</Description>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2024-09-09T00:15:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByWeek>
        <DaysOfWeek>
          <Sunday />
        </DaysOfWeek>
        <WeeksInterval>1</WeeksInterval>
      </ScheduleByWeek>
    </CalendarTrigger>
  </Triggers>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>powershell</Command>
      <Arguments>"C:\Scripts\app.temp.cleanup.ps1"</Arguments>
    </Exec>
  </Actions>
</Task>