Скрипт Для Добавления Сервис-Паков В Образ Windows

Эта статья является логическим продолжением моей предыдущий статьи.

Развивая тему добавления (установки/интеграции) пакетов обновлений в образ Windows, я решил написать скрипт, работающий с командами ДИСМ , что автоматизирует процесс и избавляет системных администраторов от рутинных действий.

Универсальность Скрипт заключается в том, что с его помощью можно устанавливать пакеты обновлений на «живую» систему, либо интегрировать в образ Windows — файл install.wim .

Гибкость Преимущество скрипта в том, что его работу можно настроить, изменив значение нескольких переменных в начале всего кода.

Например, как и в предыдущей статье, мы добавим так называемый Обновление накопительного пакета для удобства (KB3125574), а также необходимые Обновление стека обслуживания (КБ3177467).

В ходе работы над скриптом выяснилось, что после интеграции в образ KB3177467 он (образ - install.wim ), становится непригодным для дальнейшей интеграции.

Если установить KB3177467 на «живую» ОС, то проблем нет. Есть два решения этой проблемы: 1) интегрировать KB3177467 с последним 2) заменить «проблемное» обновление на его предыдущую версию — KB3020369. Я выбрал второй вариант, реализовав в скрипте условное ветвление.



Скрипт

   

@echo off Title Convenience Rollup - most important updates after SP1 set _arch=x64 set _file=install.wim set _img=Online set _mnt=mount set _lev=2 :pre_menu cls dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file% echo ------------------------------------------------------------------------------- if %ERRORLEVEL% NEQ 0 if %ERRORLEVEL% EQU 2 (goto :bit) else (pause & exit) set /p _ind=Input index or press [Enter] for quit: || exit if %_ind% EQU 0 goto :bit if %_ind% GTR 0 if %_ind% LEQ 24 goto :ind_menu goto :pre_menu :ind_menu cls dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind% echo ------------------------------------------------------------------------------- if %ERRORLEVEL% NEQ 0 pause & goto :pre_menu choice /c abcdefghijklmnopqrstuvwxyz /n /m "Mount selected image? [m] " if %ERRORLEVEL% EQU 13 goto :mount goto :pre_menu :bit if %_img%==Online (if "%PROCESSOR_ARCHITECTURE%" == "x86" if not defined PROCESSOR_ARCHITEW6432 set _arch=x86)^ else (dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind% /English | find "Architecture : x86" > nul && set _arch=x86) goto :add :add cls echo Getting packages list. Please wait. dism /%_img% /Get-Packages /LogLevel:%_lev% /English > %TEMP%\packages.txt echo ------------------------------------------------------------------------------- if not %_img%==Online ( echo Add: Servicing stack update KB3020369 call :exist .

\%_arch%\Windows6.1-KB3020369-%_arch%.

cab ||^ dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.

\%_arch%\Windows6.1-KB3020369-%_arch%.

cab /NoRestart echo ------------------------------------------------------------------------------- ) else ( echo Add: Servicing stack update KB3177467 call :exist .

\%_arch%\Windows6.1-KB3177467-%_arch%.

cab ||^ dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.

\%_arch%\Windows6.1-KB3177467-%_arch%.

cab /NoRestart echo ------------------------------------------------------------------------------- ) echo Add: Convenience rollup update KB3125574 call :exist .

\%_arch%\Windows6.1-KB3125574-v4-%_arch%.

cab ||^ dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.

\%_arch%\Windows6.1-KB3125574-v4-%_arch%.

cab /NoRestart echo ------------------------------------------------------------------------------- del %TEMP%\packages.txt if not exist %_file% exit pause goto :unmount :exist dism /%_img% /Get-PackageInfo /LogLevel:%_lev% /PackagePath:%1 /English | find "Package Identity" | findstr /g:/ %TEMP%\packages.txt > nul exit /b :mount cls md %_mnt% dism /Mount-Wim /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind% /MountDir:%_mnt% if %ERRORLEVEL% NEQ 0 rd %_mnt% & pause & exit set _img=Image:%_mnt% goto :bit :unmount cls if not %_img%==Online ( dism /Unmount-Wim /LogLevel:%_lev% /MountDir:%_mnt% /Commit rd %_mnt% ) set _arch=x64 set _img=Online goto :pre_menu



Файлы и папки

Файлы пакета обновлений сюда не прикрепляю, так как указанные в скрипте взяты за образец.

Папки должны создаваться по месту расположения скрипта х64 И х86 в который нужно поместить необходимые пакеты обновлений.

Сам файл сценария можно сохранить в кодировке АНСИ если вы не используете кириллицу для отображения информационных сообщений.

А если вы хотите видеть русский текст, то вам нужно сохранить cmd файл в кодировке OEM 866 .



Применение

Как уже отмечалось, скрипт умеет устанавливать обновления или интегрировать их.

Если в папке автозагрузки нет файла образа - install.wim , то скрипт устанавливает обновления в полностью автоматическом режиме.

Если в папке автозагрузки есть файл образа - install.wim , затем скрипт считывает из него информацию о доступных «индексах» и предлагает ввести число.

После этого отображается расширенная информация о выбранном «индексе» и выдается запрос на монтирование.

Нажатие любой клавиши приводит к возврату, а нажатие клавиши [m] запускает следующую цепочку действий: монтирование образа, интеграция обновлений, отмонтирование образа, возврат в меню выбора «Индекс».

После чего вы сможете выбрать другой «индекс» для интеграции обновлений.

Выбор «индексного» номера 0 запускает установку обновлений на «живую» ОС.



Парсинг кода

Сначала по команде набор Переменные устанавливаются.

Вы можете изменить предполагаемое имя файла изображения.

install.wim (например, на install.esd ).

Вы можете изменить имя папки монтирования или указать путь, если хотите, чтобы папка монтирования находилась за пределами папки автозагрузки.

Вы можете изменить «уровень» ведения журнала, чтобы исключить информационные сообщения из файла системного журнала.

ДИСМ .



:pre_menu

Предварительное меню.

Получение базовой информации о Вим -файл с контролем ошибок.

Если ошибка 2 – отсутствует Вим -file, затем запустите в онлайн-режиме.

Я не смог найти информацию о максимальном количестве «индексов» в одном изображении и установил значение 24.

:ind_menu

Индексное меню.

Получение расширенной информации о выбранном «индексе» в Вим -файл с контролем ошибок.

Предложение смонтировать "индекс".



:кусочек

Определение разрядности ОС.

Для онлайн-обслуживания считываются переменные среды системы, а для автономного обслуживания запрашивается необходимая информация из образа и ищется в нем ключевая строка.



:добавлять

Добавление пакетов.

Чтобы не делать лишней работы, сначала запрашивается список уже добавленных (установленных или интегрированных) пакетов, а затем перед каждой командой запуска вызывается псевдофункция для проверки.



:существовать

Псевдофункция проверки.

Работа описана в статье Проверка наличия пакета обновлений в системе перед установкой .

Код был немного изменен.



:устанавливать

Монтируем образ.

Сначала создается папка монтирования.

Контроль ошибок.

Переменная, определяющая спецификацию изображения, изменена и теперь указывает путь к автономному изображению.



:размонтировать

Размонтирование образа.

Если проводилось интерактивное обслуживание (/Online), то размонтировать не нужно.

Возврат переменных к исходным значениям.



Совместимость

Этот скрипт был протестирован на Windows 7 с помощью встроенной утилиты.

dism.exe версия 6.1.7600.16385. В ОС Windows версий 8, 8.1, 10 утилита dism.exe системы ДИСМ имеет более высокую версию.

Думаю, обратная совместимость сохранилась, и скрипт тоже будет работать.

Кроме того, можно будет работать с Оурс -файлы.

Теги: #Windows #Системное администрирование #cmd #обновления #dism

Вместе с данным постом часто просматривают: