Скрипт дополнительной очистки обновлений Windows

При каждой установке обновлений, в систему добавляются актуальные версии компонентов, заменяя системные файлы более новыми. Чтобы обеспечить возможность произвести откат в случае возникновения каких-либо проблем, предыдущие версии компонентов продолжают сохраняться в папке WinSxS. Как известно существует механизм, позволяющий выполнить очистку системы от устаревших обновлений, что в свою очередь позволяет несколько уменьшить размер папки WinSxS. В Windows 7 эта возможность появилась после выхода обновления KB2852386. Данное обновление добавляет пункт "Очистка обновлений Windows" в меню утилиты очистки диска (cleanmgr), запущенной от имени администратора. Начиная с Windows 8, для выполнения очистки обновлений, кроме утилиты очистки диска, вы можете воспользоваться инструментами, которые предоставляет дисм.

Однако есть ряд обновлений, которые не удаляются стандартной утилитой очистки диска (или дисмом). Поэтому, мною был написан специальный скрипт, который существенно расширяет возможности поиска устаревших обновлений и фактически способен заменить стандартную процедуру очистки, позволяя существенно упростить и ускорить этот процесс. Алгоритм его работы выглядит следующим образом. Используя сведения, из системного реестра, скрипт определяет актуальные обновления, установленные в системе для всех имеющихся компонентов и формирует список устаревших обновлений, которые можно безопасно удалить. Затем с помощью дисма производится удаление данных обновлений, за исключением тех, которые были добавлены в исключения и являются актуальными. Количество удаляемых обновлений будет тем больше, чем дольше система была установлена и в зависимости от того как регулярно она обновлялась. В некоторых случаях выигрыш может быть довольно существенным и позволит освободить определенное количество дискового пространства.

В меню скрипта включены следующие пункты:

  • Get Packages List - при выполнении этого пункта в папке где расположен этот батник, будет создан файл "Packages.txt", который будет содержать список всех установленных в системе пакетов. Список может быть разделен на таблицы в зависимости от свойств данных обновлений. При наличие обновлений с определенными комбинациями этих свойств, в нем может быть представлено до четырех таких таблиц : "Обычные пакеты", "Перманентные пакеты", "Скрытые пакеты", и одновременно "Перманентные и скрытые пакеты".
  • Superseded Updates - это основной пункт меню, который как раз и позволяет найти все обновления, которые более не актуальны для вашей системы и были заменены более новыми. В том числе и такие устаревшие обновления, как обновления для браузера Internet Explorer, обновления для часовых поясов и летнего времени (Daylight Saving Time and Time Zone), обновления для среды NET Framework, обновления для Adobe Flash Player (на восьмерке и выше). Если вы хотите добавить какие-то из них в исключения, то вам необходимо внести имя такого обновления в виде "KB*******", в соответствующий файл исключений - "~Exclude-6.1.txt" для семерки, или "~Exclude-6.3.txt" - для восьмерки.
  • Microsoft Office - в скрипт также добавлена возможность очистки устаревших обновлений для продуктов Microsoft Office.

Примечание. Скрипт позволяет удалить устаревшие обновления, помеченные как постоянные (permanent) - в основном это обновления стэка. Если в процессе поиска устаревших обновлений, будут найдены обновления такого типа, то будет выведен запрос об их разблокировке. Если вы ответите утвердительно, то они будут разблокированы и удалены, в противном случае они будут пропущены. Кроме того, на системах начиная с Windows 8.1 и выше, скрипт также позволяет удалять обновления, которые были "впечатаны" в образ после очистки с применением параметра "ResetBase" с помощью дисма.

Очистка хранилища. На семерке, если вы выполнили удаление устаревших обновлений с помощью скрипта, то очистка компонентов в хранилище (папка WinSxS) не происходит сразу, а идет в фоновом процессе, во время простоя системы. Поэтому, для этого нужно дать время, примерно 20 -30 минут. Однако, на системах, начиная с восьмерки и выше, ситуация несколько иная. Здесь, очистка хранилища компонентов не произойдет до тех пор, пока не будет выполнена соответствующая команда. В принципе, задача очистки прописана в планировщике задач и должна периодически происходить. Но в любом случае, вы можете не ждать и запустить ее самостоятельно, выполнив в командной строке, запущенной от имени администратора, команду: Dism /Online /Cleanup-Image /StartComponentCleanup

Not Present и Staged. Так как в некоторых случаях, в списке установленных пакетов обновлений могут присутствовать обновления с некорректным статусом установки, то в скрипт также была добавлена возможность для их удаления. Как уже говорилось выше, при выборе пункта меню "Get Packages List", в папке где расположен этот батник, будет создан файл "Packages.txt", который будет содержать список всех установленных в системе пакетов. Значения, которые обозначают состояние установки для каждого пакета в списке, будут находиться во второй колонке "State" данного файла. Это могут быть следующие значения :

  1. Installed (Установлен) - так маркируются нормально установленные обновления.
  2. Superseded (Заменен) - так маркируются устаревшие обновления, которые были заменены более новыми. Эти обновления можно удалить с помощью стандартной утилиты "Очистки диска".
  3. Not Present (Отсутствует) - механизм появления данных обновлений не ясен. В норме такие обновления не должны присутствовать в списке установленных пакетов. Вероятно, их наличие может быть связано с не совсем корректным функционированием ряда механизмов обслуживания системы при поиске, установке или удалении обновлений. Часто, в случае с обновлениями с таким статусом, в списке могут присутствовать так же и все их подпакеты, которых в норме просто не должно быть, так как список обычно состоит только из имен основных пакетов, а все подпакеты являются скрытыми. Причем в некоторых случаях их количество может достигать более половины от всех пакетов в списке.
  4. Staged (Промежуточное состояние) - так маркируются обновления, которые по какой-то причине, образно говоря, застряли в промежуточном состоянии при их установке или удалении, то есть они как бы или не до конца установлены, или не совсем удалены.

Наличие пакетов со статусом Staged и Not Present по всей видимости может вызывать определенные проблемы в системе, и в частности негативно сказываться на работе Центра обновления при поиске и установке обновлений. Поэтому такие обновления желательно удалить. Однако выполнить это стандартными способами невозможно - ни расширенная очистка, ни восстановление хранилища компонентов, ни восстановление системных файлов будут не эффективны, и не способны изменить их состояние. Поэтому для их удаления вы можете воспользоваться соответствующими пунктами меню данного скрипта (в некоторых случаях, обновления со статусом Staged можно также попробовать переустановить, используя дисм).

Advanced Options - данный пункт меню содержит некоторые опции, в расширенном меню, которые могут использовать более опытные пользователи.

  • Actual Components and Structure - это информационный пункт, позволяющий получить структуру пакетов, компонентов и их взаимокомпоновку для выбранных обновлений. При выполнении этого пункта в папке со скриптом появится файл "~CustomUpdates.txt", в который можно вписать имена обновлений, для которых вы хотите получить информацию об их структуре, в виде "KB*******". После нажатия любой клавиши, скрипт продолжит выполнение и в подпапку "Structs" будут добавлены соответствующие файлы с именами и версиями этих обновлений, содержащие требуемые сведения.
  • Change Custom Updates Property - пункт, позволяющий менять некоторые свойства выбранных пакетов обновлений, такие как видимость пакета, перманентность и статус установки. Например, если если вы не хотите, чтобы стандартная утилита очистки удаляла какое-то обновление, то вы можете сделать его перманентным (изменение вносятся в реестр, а не в mum файлы). Также как и в первом случае, после выполнения этого пункта в папке со скриптом появится файл "~CustomUpdates.txt", в который можно вписать имена обновлений, свойства которых вы хотите поменять. Если в папке уже присутствует файл "~CustomUpdates.txt" со списком обновлений, то эта операция будет произведена автоматически. Для того, чтобы эффективно проконтролировать внесенные изменения, вы можете использовать пункт Get Packages List для получения списка пакетов, в котором как раз и будут отражены, в соответствующих таблицах, данные изменения в зависимости от заданных свойств этих обновлений.
  • Delete Custom Updates - позволяет удалить те обновления, в том числе и актуальные, которые выбрали вы сами. При выборе этого пункта в папке со скриптом появится файл "~Delete.txt", в котрый необходимо вписать имя обновления, которое вы хотите удалить в виде "KB*******". После нажатия любой клавиши, скрипт продолжит выполнение и произведет его удаление. Если в папке уже присутствует файл "~Delete.txt" со списком обновлений, то эта операция также будет произведена автоматически.

Если вы не причисляете себя к категории продвинутых пользователей, то рекомендую использовать эти два последних пункта с осторожностью (или вообще не использовать).

Вам нужно скачать файл UpdateTools.zip

Скачать с Облака Mail.ru Скачать с Яндекс.Диска Скачать с Microsoft OneDrive

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