Автоматизация очистки диска в Windows 10. PowerShell и Cleanmgr.exe

После успешного обновления до следующего релиза Windows 10 или же после обновления с Windows 7 и Windows 8/8.1 до Windows 10 на диске остаются папки
C:\$Windows.~BT
C:\$Windows.~WS
C:\Windows.old
Папка Windows.old может быть довольно приличного размера. Внутри содержится предыдущая копия Windows, Programm Files, папки профилей пользователей, ProgramData. Размер папки сильно зависит от количества установленных приложений до обновления, размеров профилей пользователей. В сети встречается информация, что папки эти должны удалиться автоматически через 31 день.  В этой статье я рассмотрю процесс ручной очистки, а также варианты автоматизации этой задачи c помощью PowerShell и утилиты Cleanmgr.exe.

Очистка вручную

Очистка вручную выполняется с помощью средства очистки диска:
Очистка диска
Очистка диска. Очистить системные файлы
Очистка диска. Предыдущие установки Windows

Автоматическая очистка

При запуске cleanmgr /? мы видим, что утилита принимает следующие ключи:

Официальная документация по работе с Cleanmgr.exe никак не упоминает ключи TUNEUP:n | /LOWDISK | /VERYLOWDISK | /SETUP | /AUTOCLEAN. Таким образом, их приходится рассматривать, как недокументированные. По крайней мере, запуск cleanmgr.exe c ключами /SETUP/AUTOCLEAN не удаляет папку windows.old. Параметр /LOWDISK запускает графический интерфейс утилиты с уже выбранными параметрами очистки:

Параметр /VERYLOWDISK, насколько удалось выяснить, идентичен параметру /LOWDISK, за исключением того, что очистка проводится автоматически, но по завершению отображается окно с информацией о проделанной работе:

На Windows 10 1709 /VERYDISKLOW не удалил папку Windows.old.

Остаётся использовать PowerShell и параметры реестра, которые использует cleanmgr для выбора типов очищаемых данных.

Сценарий PowerShell

Согласно документации утилита cleanmgr.exe использует специальный параметр /SAGESET:n для сохранения набора параметров для выполнения очистки, который затем можно запускать с помощью параметра /SAGERUN:n, где n — число от 1 до 65535, используемое для идентификации набора сохранённых параметров для очистки.

Запускаем с повышенными привилегиями cleanmgr.exe /SAGESET:n. Эта команда запустит графический интерфейс утилиты в котором мы выбираем необходимый нам набор параметров для очистки:

Нажимая кнопку OK настройки сохраняются в реестр в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches:

Каждый параметр пишется в свой раздел

Каждый выставленный флажок создаёт DWORD значение с именем StateFlagsXXXX, где XXXX это число, которое мы передали в параметре SAGESET.
Я запустил команду с числом 1:

C:\WINDOWS\system32>cleanmgr.exe /SAGESET:1

Соответственно, в моём случае значение называется StateFlags0001:

Значения StateFlagsXXXX во всех интересующих нас разделах мы можем создать с помощью PowerShell, не используя команду cleanmgr.exe /SAGESET:n.
В сценарии ниже я привел вариант с включением всех существующих параметров в Windows 10 1709. После создания значений StateFlagsXXXX запускаем cleanmgr /sagerun:1 для начала процесса очистки с выбранными параметрами.
 

#Удаляем предыдущие параметры cleanmgr
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\*' -Name StateFlags0001 -ErrorAction SilentlyContinue | Remove-ItemProperty -Name StateFlags0001 -ErrorAction SilentlyContinue

#Выбираем нужный набор параметров очистки, комментируем ненужные строки

#Включаем очистку "Temporary Setup Files"
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Setup Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Старые файлы программы Chkdsk" (Old Chkdsk files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Old ChkDsk Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Файлы журнала установки" (Setup Log Files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Setup Log Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Очистка обновлений Windows" (Windows Update Cleanup)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Update Cleanup' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Windows Defender Antivirus"
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Defender' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Файлы журнала обновления Windows" (Windows upgrade log files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Upgrade Log Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Загруженные файлы программ" (Downloaded Program Files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Downloaded Program Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Временные файлы Интернета" (Temporary Internet Files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Internet Cache Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Файлы дампа памяти для системных ошибок" (System error memory dump files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\System error memory dump files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Файлы мини-дампа для системных ошибок" (System error minidump files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\System error minidump files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Файлы, оставшиеся после обновления Windows" (Files discarded by Windows upgrade)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Upgrade Discarded Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Файлы для отчётов об ошибках Windows, создавае..." (System created Windows Error Reporting Files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Файлы установки Windows ESD" (Windows ESD installation files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows ESD installation files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "BranchCache"
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\BranchCache' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Кэш построителя текстуры DirectX" (DirectX Shared Cache)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\D3D Shader Cache' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Предыдущие установки Windows" (Previous Windows installation(s))
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Previous Installations' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Корзина" (Recycle Bin)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Recycle Bin' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "RetailDemo Offline Content"
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\RetailDemo Offline Content' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Файлы резервной копии пакета обновления" (Update package Backup Files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Service Pack Cleanup' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Временные файлы" (Temporary files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Временные файлы установки Windows" (Temporary Windows installation files)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Setup Files' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "Эскизы" (Thumbnails)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Включаем очистку "История файлов пользователя" (User file history)
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\User file versions' -Name StateFlags0001 -Value 2 -PropertyType DWord

#Начинаем очистку
#Запускаем cleanmgr
Start-Process -FilePath CleanMgr.exe -ArgumentList '/sagerun:1' -WindowStyle Hidden -Wait

 

Добавить комментарий