Удаление временных данных ОС 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
<#PSScriptInfo
.VERSION      0.1.0
.GUID         f5e8380e-4e2f-4c58-972e-a60ace8dee8e
.AUTHOR       Kai Kimera
.AUTHOREMAIL  mail@kaikim.ru
.TAGS         windows temp cleanup
.LICENSEURI   https://choosealicense.com/licenses/mit/
.PROJECTURI   https://libsys.ru/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://libsys.ru/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>