Проверка Наличия Пакета Обновлений В Системе Перед Установкой

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

Центр обновления Windows и в ручном режиме через Автономный установщик Центра обновления Windows (WUSA) — автономный установщик обновлений из файлов MSU. Помимо WUSA, вы также можете обновить ОС с помощью Обслуживание образов развертывания и управление ими (DISM) — система для обслуживания и управления образами развертывания.

С помощью DISM вы можете устанавливать обновления не только из файлов MSU, но и из CAB-файлов.

Чтобы получить cab-файл пакета обновления, необходимо скачать с сайта Microsoft необходимый msu-файл и распаковать его, запустив с ключом /извлекать .

Замечено, что установка пакетов обновлений в виде cab-файлов с помощью DISM происходит быстрее, чем установка пакетов обновлений из файлов msu с помощью WUSA. Для работы с обновлениями Windows я выбираю DISM, поэтому для него предоставлено следующее описание.

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

Но иногда при обслуживании незнакомых компьютеров вы не знаете точно, какие обновления установлены, а какие нет. Если запустить установку всех обновлений из длинного списка, то даже если в образе ОС есть какие-то обновления, система DISM все равно установит их «поверх».

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

В коде скрипта, например, устанавливаются обновления КБ3177467 (обновление стека обслуживания) и КБ3125574 (Удобное накопительное обновление).

Разрядность ОС также определяется автоматически, но это не имеет отношения к теме вопроса.

Скрипт:

   

@echo off set arch=x64 if "%PROCESSOR_ARCHITECTURE%" == "x86" if not defined PROCESSOR_ARCHITEW6432 set arch=x86 echo The most important updates after SP1 (Convenience rollup) %arch% echo ------------------------------------------------------------------------------- echo Get packages list. Please wait. dism /English /Online /Get-Packages > "%TEMP%\packages.txt" echo Servicing stack update: KB3177467 call :exist .

\%arch%\Windows6.1-KB3177467-%arch%.

cab ||^ dism /Online /Add-Package /PackagePath:.

\%arch%\Windows6.1-KB3177467-%arch%.

cab /Quiet /NoRestart echo Convenience rollup update: KB3125574 call :exist .

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

cab ||^ dism /Online /Add-Package /PackagePath:.

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

cab /Quiet /NoRestart echo ------------------------------------------------------------------------------- pause :exist dism /English /Online /Get-PackageInfo /PackagePath:%1 | find "Package Identity" |^ findstr /g:/ %TEMP%\packages.txt > nul && exit /b exit /b 1

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

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

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

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

Описание работы: Перед началом установки DISM спросит ( /Get-Пакеты ]) ОС имеет список уже установленных пакетов обновлений и сохраняет его в текстовом файле во временной папке %TEMP%\packages.txt .

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

«Функция» :существовать выдержки ( /Get-PackageInfo ) из проверяемого пакета — служебная информация, в которой находится строка «Идентификация пакета» .

Ээта строка «по конвейеру» передается следующей команде поиска, которая ищет эту строку в сохраненном файле %TEMP%\packages.txt .

По результатам поиска возможны два варианта:

  • Если обновление не обнаружено установленным в системе, то "функция" :существовать выходит с кодом %ОШИБКА% 1 , и в этом случае происходит установка ( /Добавить пакет ) пакет системы DISM. После установки обновления (в случае успеха) - сброс %ОШИБКА% и может быть использован для запуска «функции» в следующий раз :существовать ;
  • Если обновление обнаружено установленным в системе, то «функция» :существовать выходит с кодом %ОШИБКА% 0 , и в этом случае пакет обновлений не устанавливается, и скрипт переходит к обработке следующего элемента в списке.

    Необходимость перезагрузки %ОШИБКА% Нет.

Возможные проблемы: Проверка наличия обновлений, присутствующих в ОС, производится только по полю «Идентификация пакета» , статус не проверяется! В нормальном состоянии пакеты имеют статус Установлен (Установлено), но возможны ошибочные состояния пакетов обновлений, присутствующих в системе: Заменено (Заменены) Нет (Отсутствующий), Постановочный (Средний).

Статус имеющихся пакетов можно просмотреть, открыв файл %TEMP%\packages.txt , созданный во время работы скрипта.

Если нет «ошибочных» состояний, то и проблем быть не должно: то, что не установлено, будет установлено, а то, что уже установлено, будет пропущено.

Использование этого скрипта для обновления ОС при отсутствующих пакетах экономит массу времени! Теги: #Windows #Системное администрирование #cmd #обновления

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

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.