Почему в get-hotfix и wmic qfe list в Powershell отсутствуют установленные обновления?

32046
a paid nerd

Я пытаюсь написать скрипт, чтобы убедиться, что определенное исправление установлено. На одном из наших тестовых компьютеров под управлением Windows 8.1 get-hotfixвозвращает неполный список исправлений:

Почему в get-hotfix и wmic qfe list в Powershell отсутствуют установленные обновления?

Тем не менее, в панели управления «Программы и компоненты» отображается множество исправлений:

Почему в get-hotfix и wmic qfe list в Powershell отсутствуют установленные обновления?

Все остальные наши тестовые машины, включая другие, установленные с Windows 8.0 и 8.1, работают нормально. Есть идеи, почему это так? Как я могу получить полный список исправлений от Powershell?

Изменить: wmic qfe list показывает только те же четыре исправления, get-hotfixа также.

5
Спасибо @PJMahoney - я попробовал эти предложения без удачи. get-wmiobject -class win32_quickfixengineering` показывает те же результаты, что и get-hotfix. a paid nerd 9 лет назад 0

2 ответа на вопрос

9
bentek

I believe the Get-Hotfix commandlet leverages the Win32_QuickFixEngineering WMI class to list Windows Updates, but only returns updates supplied by Component Based Servicing (CBS). Updates supplied by the Microsoft Windows Installer (MSI) or the Windows update site are not returned by Get-Hotfix/Win32_QuickFixEngineering.

You can try using the Windows Update API through PowerShell like in the below example. Give this a shot and let us know if it shows the missing updates.

$Session = New-Object -ComObject Microsoft.Update.Session $Searcher = $Session.CreateUpdateSearcher() $Searcher.Search("IsInstalled=1").Updates | ft -a Date,Title 

EDIT: To search through the results, you can use the Where-Object commandlet (or alias Where) and filter for a specific hotfix:

$Searcher.Search("IsInstalled=1").Updates | Where {$_.Title -like "*KB2760587*"} | ft date,title 
Спасибо @bentek! Это делает это. Поскольку я довольно новичок в Powershell, не могли бы вы также показать мне хороший способ запросить эти результаты, чтобы узнать, включено ли конкретное исправление? a paid nerd 9 лет назад 0
Кроме того, это менее совместимо с более старыми версиями Windows, чем `get-hotfix`? a paid nerd 9 лет назад 0
Отредактировал мой ответ, чтобы включить простой запрос для конкретного исправления. bentek 9 лет назад 1
На самом деле, это сообщение об обновлениях как установленных, которые не перечислены в разделе «Программы и компоненты» -> «Установленные обновления». a paid nerd 9 лет назад 0
Похоже, я хочу использовать `$ Searcher.Search (" IsInstalled = 1 "). Updates | ft -a Дата, Название` вместо. a paid nerd 9 лет назад 1
Хорошо поймал. Я обновил пример кода соответственно. bentek 9 лет назад 0
К вашему сведению: см. Также: «История установки клиента Центра обновления Microsoft» по адресу https://social.technet.microsoft.com/wiki/contents/articles/4197.how-to-list-all-of-the-windows-and-software -updates-apply-to-a-computer.aspx для другой версии этого решения (для меня вышеупомянутое не удалось, но оно привело меня к этой ссылке Technet, которая работала). JohnLBevan 7 лет назад 1
@bentek У меня есть проблемы с пониманием. На страницах упоминаются такие клиенты, как msi или Windows Update, которые передают свои пакеты в CBS, которая затем дополнительно выполняет установку. Что означает «предоставленный CBS» в этом контексте? Это скорее гласит, что оба работают вместе 24/7. Также спасибо за скрипт, похоже, он возвращает хотя бы то обновление, которое я искал, но буквально требуется несколько часов, чтобы закончить ... почему? taclight 7 лет назад 0
1
Root Loop

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

Посмотрите здесь

https://social.technet.microsoft.com/wiki/contents/articles/4197.how-to-list-all-of-the-windows-and-software-updates-applied-to-a-computer.aspx