![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка присутствия пакета обновления в системе перед установкой |
|
CMD/BAT - [решено] Проверка присутствия пакета обновления в системе перед установкой
|
Пользователь Сообщения: 107 |
Установка пакетов обновлений для Windows может происходить как в автоматическом режиме службой Windows Update, так и в ручном режиме через Windows Update Stand-alone Installer (WUSA) - Автономный установщик обновлений из msu-файлов. Кроме WUSA, обновить ОС также можно с помощью Deployment Image Servicing and Management (DISM) - Система обслуживания образов развёртывания и управления ими. Используя DISM можно устанавливать обновления на не только из msu-фалов, но и из cab-файлов. Чтобы получить cab-файл пакета обновления, нужно скачать с сайта Microsoft нужный msu-файл и распаковать его запуском с ключом /extract. Замечено что установка пакетов обновлений в виде cab-файлов с помощью DISM происходит быстрее чем из msu-файлов с помощью WUSA. Я выбираю DISM для работы с обновлениями Windows, поэтому дальнейшее описание приведено для неё.
Многие системные администраторы собирают свои "коллекции" пакетов обновлений, запуская их установку в определённой последовательности через командный файл. Но иногда, обслуживая незнакомые компьютеры, точно неизвестно какие обновления установлены, а какие - нет. Если запустить установку всех обновлений из длинного списка, то при наличии некоторых обновлений в образе ОС система DISM всё равно установит их "поверх". Чтобы избежать напрасной потери времени в моём скрипте используется "функция" которая проверяет устанавливаемый пакет обновления на его присутствие в ОС. В коде скрипта, для примера, выполняется установка обновлений KB3177467 (Servicing stack update) и KB3125574 (Convenience rollup update). Также происходит автоматической определение разрядности ОС, но это не относиться к теме вопроса. Скрипт: @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 Перед началом установки система DISM запрашивает (/Get-Packages) у ОС список уже установленных пакетов обновлений и сохраняет его в текстовом файле в папке %TEMP%\packages.txt. В дальнейшем перед началом установки каждого пакета обновлений происходит обращение к "функции" :exist с передачей в качестве аргумента - пути к устанавливаемомму пакету для проверки. "Фунция" :exist извлекает (/Get-PackageInfo) из проверяемого пакета служебную информацию, в которой отыскивается строка "Package Identity". Эта строка "по конвейеру" передаётся следующей команде поиска, которая ищет данную строку в сохранённом файле %TEMP%\packages.txt. По результатам поиска возможны два варианта:
Проверка присутствующих в ОС обновлениях выполняется только по полю "Package Identity", статус не проверяется. В нормальном состоянии пакеты имеют статус Installed (Установлен), но возможны ошибочные состояния присутствующих в системе пакетов обновлений: Superseded (Заменён), Not Present (Отсутствует), Staged (Промежуточное). Состояние присутствующих пакетов можно посмотреть открыв файл %TEMP%\packages.txt, созданный в процессе работы скрипта. Если "ошибочных" состояний нет, то проблем быть не должно: установиться то чего нет, и пропустится то что уже установлено. Использование данного скрипта для обновления ОС недостающими пакетами значительно экономит время! |
|
Отправлено: 18:56, 24-10-2017 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Проверка процессора перед покупкой | NIK007 | Процесcоры | 4 | 17-10-2015 22:54 | |
Любой язык - [решено] определение присутствия в системе дисковода | Fortress1 | Скриптовые языки администрирования Windows | 5 | 14-08-2013 15:57 | |
2010 - Как определить версию пакета обновления | Sparkster | Microsoft Office (Word, Excel, Outlook и т.д.) | 1 | 10-01-2012 01:25 | |
Загрузка - установка пакета обновления | infected09 | Microsoft Windows 7 | 1 | 13-11-2011 21:34 | |
7 / 2008 R2 - Пауза перед установкой | Hector | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 0 | 23-04-2010 00:18 |
|