Автоматизация очистки диска в 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:

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

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

 

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