Скрипт отключения компонентов Windows
Продолжаю серию статей по администрированию операционной системы Windows. В предыдущей статье работа велась с пакетами обновлений, а в этой с компонентами системы. Дополнительные компоненты расширяют функциональные возможности ОС, но многие из них попросту бесполезны для большинства пользователей. Я предлагаю удобный скрипт отключающий «ненужные» компоненты. Команды скрипта обращаются к средствам DISM и могут быть применимы как к установленной системе, так и к автономному образу. Скрипт определяет версию утилиты dism.exe и подставляет нужные команды. Реализовано ветвление по версии целевой ОС, таким образом что в одном скрипте можно указать отключаемые компоненты для разных версий Windows. Отключение компонентов данным скриптом обратимо. Я делаю это главным образом для того, чтобы убрать из меню Пуск ссылки на ненужные мне программы. Здесь для примера указано по два компонента для каждой версии Windows, которые будут отключены. Тем, кто будет использовать данный скрипт в своей работе, необходимо дополнить его. Определите компоненты, которые вам не понадобятся и добавьте их отключение в скрипт. Путём нехитрых изменений, можно наоборот — включать компоненты. Для своих нужд Я оставляю только Internet Explorer, Media Player, Windows Search и .NET Framework 3.5.1. Последний отключён производителем в новых версиях Windows, с удалением файлов, и чтобы его включить у меня есть отдельный скрипт, о котором Я напишу позже.
Скрипт
Использование
Данный скрипт может отключать компоненты как в онлайн системе так и в автономном образе. Если в папке запуска отсутствует файл образа — install.wim, то скрипт выполняет отключение компонентов в полностью автоматическом режиме. Если в папке запуска присутствует файл образа — install.wim, то скрипт выполняет считывание из него информацию об имеющихся «индексах» и предлагает ввести номер. После этого отображается расширенная информация о выбранном «индексе» выдаётся запрос на монтирование. Нажатие любой клавиши приводит к возврату, а нажатие клавиши [m] запускает следующую цепочку действий: монтирование образа, отключение компонентов, размонтирование образа, возврат в меню выбора «индеска». После чего можно выбрать другой «индекс» для отключения компонентов. Выбор «индекса» под номером 0 запускает отключение компонентов на «живой» ОС.
Разбор кода
Вначале командой set происходит установка переменных. Можно изменить предполагаемое имя файла образа install.wim (например, на install.esd). Можно изменить имя папки монтирования или задать путь, если папка монтирования должна находится за пределами папки запуска. От установки «уровня» логирования, как в предыдущем скрипте по пакетам обновления, решил отказаться и напрямую прописал во всех командах информирование только об ошибках — /LogLevel:1. Также во всех командах добавил ключ /English чтобы все сообщения отображались на английском языке.
Скрипт может быть запущен на разных версиях ОС, и таким образом обращаться к разным версиям системы DISM, которые отличаются набором команд. Так, в версиях после 6.1 во всех командах, слово Wim заменено на Image, хотя и оставлены старые «наименования» команд для обратной совместимости. В самом начале работы скрипта определяется версия утилиты dism.exe и в дальнейшем во все команды подставляется нужное слово. Без определения версии можно было бы и обойтись, но данный функционал Я использую в своём скрипте по получению информации из образа Windows, поэтому просто не стал переписывать код.
:pre_menuПредварительное меню. Получение основной информации о wim-файле с контролем ошибок. Если отсутствует файл образа, то запуск в режиме Online. Не нашел информацию о максимальном количестве «индексов» в одном образе и установил значение 24.
:ind_menuИндексное меню. Получение расширенной информации о выбранном «индексе» в wim-файле с контролем ошибок. Предложение смонтировать «индекс».
:versionОпределение версии целевой системы. Если находится необходимая строка, то осуществляется переход к указанной метке. Если строка не обнаруживается, то происходит размонтирование.
:disable-7 :disable-9 :disable-AМетки целевых систем обслуживания. Я называю Windows 8.1 — девяткой, а Windows 10 — Windows A (кто в теме тот поймёт), поэтому такие имена у меток. Вначале данного блока происходит запрос состояния всех компонентов с сохранением в файл features.txt. В дальнейшем, чтобы ускорить процесс отключения и не пытаться отключить то, что и так отключено, происходит предварительная проверка состояния каждого компонента. В конце блока — удаление временных файлов и размонтирование.
:stateПроверка состояния компонента. Псевдо-функция, возвращающая результат по коду ошибки в глобальную переменную %ERRORLEVEL%. Строка с именем компонента ищется в файле features.txt и если находится и также обнаруживается слово «Enable», то сигнал к отключению.
:mountМонтирование образа. Предварительно создаётся папка монтирования. Контроль ошибок. Изменяется переменная определяющая спецификацию образа, теперь указывает на путь к автономному образу.
:unmountРазмонтирование образа. Если выполнялось интерактивное обслуживание (/Online), то размонтировать не нужно. Возвращение переменных к исходным значениям.
Возможные проблемы
При обслуживании образа вышестоящей версии на системе нижестоящей версии возможны зависания и ошибки. То есть, не нужно пытаться на Windows 7 обрабатывать файл образа Windows 8.1 или 10. Также для успешного выполнения всех команд требуется отключить Контроль учётных записей — параметр EnableLUA установить в значение 0.