Как узнать обновление windows 7 через командную строку

Обновлено: 04.07.2024

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

В этой статье объясняется, как проверить наличие определенного Центра обновления Windows ( KBnnnnnn ) установлен на вашем компьютере или нет.

Найти, был ли применен КБ Центра обновления Windows

  • Способ 1. Проверьте историю обновлений Windows
  • Способ 2. Просмотр установленных обновлений в панели управления «Программы и компоненты»
  • Способ 3: использовать командную строку DISM
  • Способ 4: снова запустите файл установщика обновлений KB (.msu), чтобы проверить
  • Способ 5: использование утилиты WinUpdatesList от NirSoft
  • Способ 6: использование инструмента командной строки WMI
  • Способ 7. Проверьте записи реестра CBS Центра обновления Windows

Как проверить, установлено ли на вашем компьютере обновление Windows (KB)

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

Способ 1. Проверьте историю обновлений Windows

Современное приложение «Настройки» позволяет просматривать историю обновлений Windows. Вот как это можно посмотреть.

Проверьте, установлен ли КБ Центра обновления Windows

  1. Откройте Настройки и нажмите Обновить Безопасность
  2. щелчок Посмотреть историю обновлений. На странице истории обновлений отображается список обновлений, установленных на вашем компьютере.
  3. Прокрутите список и найдите конкретное обновление ( KBnnnnnn ) ты ищешь.

Способ 2. Просмотр установленных обновлений в панели управления «Программы и компоненты»

Используя апплет «Программы и компоненты» на панели управления, вы можете найти список установленных обновлений.

Проверьте, установлен ли КБ Центра обновления Windows - программы и функции, панель управления

  1. Щелкните правой кнопкой мыши Start, выберите Run.
  2. Тип appwiz.cpl и нажмите ОК. Это открывает программы и функции в классической панели управления.
  3. щелчок View installed updates ссылка в левой части. Здесь показан список обновлений вместе со столбцом даты установки.

Заметка: В классическом апплете «Программы и компоненты» обновление стека обслуживания (SSU) KB4470788 в списке, и дата установки отображается как Dec 07, 2018 , Похоже, что опция «Просмотр истории обновлений» в современном приложении «Настройки» и «Программы и компоненты» используют два разных источника для поиска истории обновлений.

Способ 3: с помощью команды DISM

Встроенный инструмент DISM может выводить список установленных пакетов Windows Update CBS. Следуй этим шагам:

Вывод перенаправляется в буфер обмена (используя | clip оператор).

Способ 4. Снова запустите файл установщика обновлений KB (.msu).

Запуск установки KB .msu еще раз скажет вам, если обновление уже установлено. Вот как получить автономный установщик из каталога Центра обновления Майкрософт и запустить установочный файл MSU. Обратите внимание, что этот метод работает для автономных установщиков обновлений Windows .msu только. То есть этот метод не применяется, если у вас есть .cab версия.

Способ 5: использование утилиты WinUpdatesList от NirSoft

Утилита WinUpdatesList ( wul.exe ) от Nirsoft отображает список всех обновлений Windows, включая пакеты обновления и исправления, установленные на локальном компьютере. Вы можете скопировать список обновлений в буфер обмена или сохранить его в текстовый / HTML / XML файл одним щелчком мыши. Следующие поля отображаются для каждого обновления в списке. Мы покрыли WinUpdatesList в статье Как распечатать историю обновлений Windows путем экспорта в текстовый или HTML-файл?

Проверьте, установлен ли КБ Центра обновления Windows winupdateslist

Примечание: Утилита WinUpdatesList, однако, не перечислила обновление стека обслуживания KB4470788 на моем компьютере. Надеюсь, этот инструмент хорошо работает в вашем случае.

Способ 6: использование командной строки WMI

В командной строке администратора запустите:

Проверьте, установлен ли КБ Центра обновления Windows

Он показывает список установленных обновлений, дату установки и другие подробности.

Или Экспорт в файл HTML, используя этот синтаксис:

Или, чтобы просмотреть конкретное обновление, запустите:

Кроме того, вы можете запустить команду Get-Hotfix из окна PowerShell, чтобы получить те же результаты.


Вы можете отсортировать таблицу по InstalledOn столбец в порядке убывания, выполнив эту команду:

Командлет Get-HotFix PowerShell также использует класс Win32_QuickFixEngineering (QFE) WMI в качестве инструмента CLI WMIC, описанного выше. Выход точно такой же.

Чтобы получить список всех обновлений базы знаний, включая обновления операционной системы, Office и приложений, используйте сценарий PowerShell, упомянутый в конце статьи. Как напечатать историю обновлений Windows путем экспорта в текстовый или HTML-файл

systeminfo Команда из окна командной строки также перечисляет установленные исправления. Он снова использует класс WMI QFE для запроса списка исправлений.


Способ 7. Проверьте записи реестра CBS Центра обновления Windows

Для каждого установленного обновления создается соответствующая запись реестра пакета обслуживания на основе компонентов. С помощью редактора реестра вы можете проверить, установлено ли обновление Windows на вашем компьютере.

  1. Запустите редактор реестра ( regedit.exe )
  2. Перейти к следующему разделу реестра:
  3. Используйте параметр «Найти» в меню «Правка» и найдите ключ с текстом 4470788 (найти KB4470788 связанные записи.)

Если ключ существует, вы попали в ветку. В моем случае, поскольку обновление уже было установлено, опция Find привела меня к этому ключу:

Вот список возможных CurrentState значения реестра и их значение:

Применимо / Текущее состояние
наговор
декабрь
Отсутствует 0 0
Uninstall Pending 0x5 5
Разрешающая 0x10 16
Постановили 0x20 32
инсценировка 0x30 48
Поэтапное 0x40 64
Заменено 0x50 80
Установить в ожидании 0x60 96
Частично установлен 0x65 101
Установлены 0x70 112
перманентный 0x80 128

Определить дату установки время обновления с использованием реестра

Каждый ключ пакета CBS имеет два значения, а именно InstallTimeLow InstallTimeHigh , Эти ключи при декодировании покажут вам дату и время, когда было установлено обновление. Однако у нас есть быстрый способ узнать точную дату и время установки обновления на ваш компьютер.

Хитрость заключается в том, чтобы экспортировать ветку Package в .txt файл (вместо .reg формат) и прочитайте отметку времени, указанную в файле. Мы найдем дату установки и время обновления KB4470788 в этом пример.

  1. В редакторе реестра выберите следующее ( KB4470788 ) ключ:
  2. Щелкните правой кнопкой мыши на ключе пакета и выберите «Экспорт».
  3. В этом примере мы экспортируем Package_1_for_KB4470788

Время последней записи обозначает дату и время создания записи реестра.

windows update kb установка даты и времени панель управления

Как вы можете видеть, время последней записи в этом примере соответствует дата и время мы определили в Method 2 используя «Программы и компоненты».

Это оно! Надеюсь, что эта статья помогла вам проверить, было ли определенное обновление Windows (KBnnnnnn) применено к вашей системе или нет.

Вы когда-нибудь задумывались, с помощью чего формируется список установленных обновлений Windows? А через какое API его достать? Ответы на эти и другие возникающие вопросы я постараюсь дать в своём небольшом исследовании.




Предыстория или с чего всё началось.

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

Раньше на каждое «ТО» с помощью WSUS подтягивались все выпущенные обновления и распространялись на все машины. Также периодически выходили ТСБ (технические сервисные бюллетени), в которых указывалось, что требуется установить необходимые обновления в виде изолированных пакетов. В итоге у нас накапливаются обновления, которые в WSUS отследить нельзя, а можно было увидеть только через панель управления в разделе «Установленные обновления».

Наглядная схема обновления

Бывают ситуации, когда АРМ или сервер «падает» и приходится его восстанавливать из образа, созданного некоторое время назад. При восстановлении из образа есть вероятность того, что мы можем потерять нужные нам обновления (которые пришли в виде изолированных пакетов), которые устанавливались до падения машины. Объяснил максимально подробно насколько мог, потому что уточнения будут уже коммерческой тайной.

Как вы могли догадаться из названия статьи, уже на выборе метода получения списка у меня возникла непростая задача. Я, как обычно, решил поискать нужное в поисковике, задал вопросы на профильных ресурсах (раз, два, на английском stackoverflow почему-то не понравился мой вопрос и его пришлось удалить), но все ответы не давали нужного результата. Поэтому пришлось разбираться самому, о чем и пойдет речь далее.

Консольные команды

Начнем с простого и воспользуемся тем, что предлагает нам Windows без использования сторонних средств. Это можно сделать с помощью следующих команд:

  • wmic qfe list
  • systeminfo
  • dism /online /get-packages
  • через PowerShell:

  • Get-HotFix
  • Get-SilWindowsUpdate (доступно только в серверных редакциях)
  • Get-WmiObject -Class win32_quickfixengineering — через доступ к WMI классу win32_quickfixengineering (о WMI чуть позже)

Получить список через графический интерфейс можно через стандартный пункт Панели управления «Установка/удаление программ», но скопировать оттуда мы ничего не можем. Каждый инструмент панели управления представлен файлом .cpl в папке Windows\System. Файлы .cpl в системную папку Windows автоматически загружаются при запуске панели управления. За пункт Программы отвечает файл Appwiz.cpl. Его анализ ни к чему не привел.

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

Локальные и сетевые методы получения информации

Все методы проверялись на чистых образах систем (Windows 7, 8, Server 2012 R2) с интегрированными обновлениями, после каждого обновления через Центр обновления с официальных серверов Microsoft проводилась дополнительная проверка. Остановимся на каждом из них подробнее.


WUApi (Windows Update Agent API) — использование API агента обновления Windows. Самый явный вариант, название которого говорит само за себя. Использовать для этого будем библиотеку Wuapi.dll.
Примечание: далее для своего удобства все результаты я буду вставлять в List. Это, возможно, не рационально, но тогда мне это казалось хорошей идеей.

Есть и вторая вариация этого метода: Update Session — получение информации с помощью подключения к сессии обновления Windows Update Agent (в данном случае работаем не напрямую с библиотекой).

Microsoft подсказывает об удаленном использовании API.

Главный минусы этих двух методов — не позволяют найти исправления KB, которые не распространяются через Центр обновления Windows. Можно увидеть только то, что прошло через сам агент обновления, то есть данный вариант нас не устраивает.

Система обслуживания образов развертывания и управления ими (Deployment Image Servicing and Management) — это средство командной строки, которое может использоваться для обслуживания образа Windows или для подготовки образа среды предустановки Windows (Windows PE). Является заменой диспетчера пакетов (Pkgmgr.exe), PEimg и Intlcfg.

Данная утилита используется для интеграции обновлений, сервис паков в образ системы. Обновления Windows представляют собой отдельные модули, которые могут быть представлены в нескольких вариантах:

  • .cab-файлы (Cabinet) — архивы. Предназначены для распространения и установки при помощи модулей Центра обновлений Windows в автоматизированном режиме;
  • .msu-файлы (Microsoft Update Standalone Package) — исполняемые файлы. Предназначены для распространения и установки самими пользователями в ручном режиме через каталог обновлений Microsoft. Фактически представляют собой упакованный набор, состоящий из .cab-, .xml, .txt-файлов.

Количество обновлений совпадало с количеством из списка Панели управления до первого апдейта через центр управления — после него количество обновлений стало меньше (было 214, стало 209), хотя по логике они должны были увеличиться. Примеры вывода До обновления, После обновления.

С чем это связано я могу только предполагать — возможно, какие-то обновления замещали предыдущие, следовательно, и количество стало меньше.

Чуть позже я наткнулся на утилиту от китайцев DISM++, которая основана не на DISM API или DISM Core API, но имеющиеся в ней библиотеки не имеют нужных мне открытых методов, поэтому я забросил эту идею и продолжил поиски дальше.

Windows Server Update Services (WSUS) — сервер обновлений операционных систем и продуктов Microsoft. Сервер обновлений синхронизируется с сайтом Microsoft, скачивая обновления, которые могут быть распространены внутри корпоративной локальной сети. Опять же специальный инструмент, предназначенный для работы с обновлениями.

Распространяется только на серверных редакциях ОС Windows, поэтому был развернут следующий стенд:

  • основная система – Windows Server 2016;
  • а через систему виртуализации Hyper-V были развернуты две клиентские ОС:
    • Windows 8.1
    • Windows 7

    Чтобы не выделять раздел жесткого диска для новой системы я пользуюсь WinNTSetup и устанавливаю систему в VHD диски — загрузчик, начиная с Windows 7 (редакций Professional/Ultimate), прекрасно справляется с загрузкой с образа диска. Полученные таким образом диски можно спокойно использовать и в Hyper-V — убиваете сразу двоих зайцев. Не забудьте только сделать заранее копию хранилища BCD через команду bcdedit /export e:\bcd_backup.bcd.

    Настраивать AD для рассылки обновлений я не захотел, поэтому просто прописал в групповых политиках путь к WSUS серверу:

    Параметры настройки

    Обязательно уделите внимание на порт, я из-за опечатки (8350 вместо 8530) не мог получить обновления на клиентских машинах, хотя сделано было всё верно. Так же названия пунктов в групповых политиках на Windows 7 и Windows 8 различаются.

    Для получения отчета средствами WSUS необходимо дополнительно установить пакет — система уведомит вас об этом.

    Так как интернета нет, то ситуация с обновлениями выходит как на скриншоте ниже:


    Поведение похоже на WUApi — если обновления не прошли через них, то они не знают об этом. Поэтому данный метод снова не подходит.

    Windows Management Instrumentation (WMI) в дословном переводе — инструментарий управления Windows.

    WMI — реализованный корпорацией Майкрософт стандарт управления предприятием через Интернет для централизованного администрирования и слежения за работой различных частей компьютерной инфраструктуры под управлением платформы Windows. WMI является открытой унифицированной системой интерфейсов доступа к любым параметрам операционной системы, устройствам и приложениям, которые функционируют в ней.

    Данный метод позволяет получить данные как с локальной машины, так и удаленно в пределах локальной сети. Для обращения к объектам WMI используется специфический язык запросов WMI Query Language (WQL), который является одной из разновидностей SQL. Получать список мы будем через WMI класс win32_quickfixengineering.

    Количественно всё совпадает (даже после обновлений), поэтому было решено использовать этот метод. Для программного создания WMI запросов советую использовать следующую утилиту — WMI Delphi Code Creator. Благодаря ей я немного по другому взглянул на свой код и решил использовать заготовку из этой программы.

    Полученные данные методом WMI меня не остановили, и я решился на „поверхностный реверс-инжиниринг“. Воспользуемся утилитой Process Monitor из сборника программ Sysinternals Suite для выявления файлов и ветвей реестра, которые используются при вызове выше перечисленных консольных команд и обращению к пункту „Установленные обновления“ через Панель управления.

    Моё внимание привлек файл wuindex.xml, расположенный в папке C:\Windows\servicing\Packages\. Для его анализа была написана следующая программа:

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

    Вот мы подошли к тому, с чем связаны все эти методы. Продолжая анализ логов Process Monitor я выявил следующие папки и файлы.

    Файл DataStore.edb, расположенный в папке C:\Windows\SoftwareDistribution\DataStore. Это база данных, в которой содержится история всех обновлений установленной версии Windows, включая те обновления, которые только стоят в очереди.

    Для анализа файла DataStore.edb использовалась программа ESEDatabaseView. В БД существует таблица tbUpdates, содержимое которой трудно интерпретировать.

    Таблица tbUpdates в ESEDatabaseView

    После мое внимание привлек процесс TiWorker.exe, который вызывался каждый раз при открытии пункта в Панели управления. Он „ходил“ по многим папкам, одна из которых вывела меня на верный путь.

    C:\Windows\SoftwareDistribution — это папка, используемая службой обновления Windows для загрузки обновлений на компьютер с последующей их установкой, а также хранит сведения обо всех ранее установленных обновлениях.

    Папка WinSxS, расположенная по адресу C:\Windows\winsxs. Это служебная папка операционной системы Windows служащая для хранения ранее установленных версий системных компонентов. Благодаря ее наличию существует возможность отката к более старой версии обновления в случае необходимости.

    C:\Windows\servicing — основная составляющая всей системы, имя которой Component-Based Servicing (CBS).

    CBS — обслуживание на основе компонентов, составляющая Windows, интегрированная с службой Windows Update. В противоположность обслуживанию на основе файлов File-Based Servicing (FBS) (для ОС, предшествующих Windows Vista), в котором файлы обновлялись прямо в системных директориях, в CBS появилась целая иерархия директорий и целое семейство (стек) модулей/библиотек обслуживания.

    CbsApi.dll — основная библиотека поддержки технологии CBS. Не имеет открытых методов, поэтому напрямую использовать её я не смог. Microsoft использует TrustedInstaller.exe и TiWorker.exe для доступа к методам данной библиотеки и уже через эти процессы выводит нужные нам данные. ‪Записи ведутся в C:\Windows\Logs\CBS\CBS.log.

    Вывод

    Microsoft слишком усложнила тривиальную задачу по получению списка обновлений и сделала этот процесс не совсем явным. Всё это сделано для безопасности, но не для простоты использования. Соглашусь с автором статьи — в получении обновлений стали отсутствовать предсказуемость и прозрачность.

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

    date

    17.08.2011

    directory

    Windows 7

    comments

    комментариев 5

    Как узнать какие обновления ОС Windows установлены на вашем ПК или сервере? Конечно, можно открыть «Панель управления->Установка/удаление программ», либо элемент Update History в Windows 7/2008 и просмотреть список установленных обновлений, однако с помощью графического интерфейса нельзя ни выгрузить этот список, ни осуществить поиск по нему. В таком случае, необходимо прибегнуть к помощи командной строки. С помощью следующей команды можно вывести подробный список всех обновлений, которые установлены на данной системе Windows:


    Текстовый файл с именем updatelist.txt создастся в каталоге C:\Windows\System32\.

    Если нужно узнать установлено ли конкретное обновление Windows на данной системе (например, KB2544521), можно воспользоваться командой find, перенаправив вывод в нее:


    Как вы видите, обновление KB2544521 уже установлено.

    Однако будьте внимательными, все эти команды отображают лишь установленные обновления и хотфиксы для самой ОС Windows, информации об обновлениях любых других продуктов Microsoft (таких как, UAG, Office, TMG, SQL или Exchange) здесь отсутствует. Для просмотра установленных обновлений на эти продукты, необходимо в меню пуск набрать: “View Installed Updates”, после чего откроется стандартное окно, доступное из панели управления.


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

    Также при установке обновлений не стоит забывать, что они требуют перезагрузки системы. В Windows 7 после установки обновлений она перезагружается автоматически, что достаточно неудобно. К счастью, можно отключить автоматическую перезагрузку Windows после установки обновлений.

    Иногда требуется проверить установленные в системе обновления. Конечно, можно просмотреть журнал обновлений, однако выискивать нужное обновление в длинном списке достаточно сложно и долго. Поэтому гораздо проще воспользоваться командной строкой, которая предоставляет для этого несколько способов.

    Быстрее и проще всего отыскать нужный апдейт с помощью утилиты командной строки wmic.exe. Так следующая команда выведет полный список установленных обновлений:

    А так мы найдем найдем нужное:

    wmic qfe list | find ″KB982018″

    wmic

    Get-WmiObject

    PowerShell также позволяет просмотреть установленные обновления. Сделать это можно с помощью командлета Get-WmiObject, например:

    Get-WmiObject -Class win32_quickfixengineering -Filter ″HotFixID=′KB982018′″ | fl HotFixID, InstalledOn, Description, Caption

    Get-WmiObject

    Как видите, команда несколько сложнее и требуется дополнительно отформатировать вывод, однако результат такой же, как и у утилиты wmic. Что неудивительно, так как в обоих случаях данные получаются путем обращения к WMI классу win32_quickfixengineering. Обратите внимание, что он содержит данные только об обновлениях операционной системы и ее компонентов. Получить информацию об обновлениях для других продуктов MS (Office, Exchange и т.п) таким образом не получится.

    Get-SilWindowsUpdate

    В Windows Server 2012 R2 имеется модуль SoftwareInventoryLogging, предназначенный для инвентаризации установленного ПО. В состав этого модуля входит командлет Get-SilWindowsUpdate, с помощью которого также можно посмотреть установленные обновления. Например:

    Get-SilWindowsUpdate -ID kb3149090

    Get-SolWindowsUpdate

    Этот командлет также использует WMI запрос к классу MsftSil_WindowsUpdate. Get-SilWindowsUpdate очень прост и удобен в использовании, но к сожалению доступен он далеко не везде. Модуль SoftwareInventoryLogging присутствует только в серверных ОС начиная с Windows Server 2012 R2 с установленным обновлением KB3000850.

    Microsoft Update Client Install History

    $session = New-Object -ComObject ″Microsoft.Update.Session″
    $searcher = $session.CreateUpdateSearcher()
    $hystorycount = $searcher.GetTotalHistoryCount()
    $searcher.QueryHistory(0,$HistoryCount) | where | fl Date,Title,Description,SupportUrl

    Microsoft Update Client Install History

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

    Читайте также: