É possível detectar o status do Windows Update via registro, para ver se o sistema está “totalmente atualizado”?

1

Eu gostaria de poder verificar o status de atualização do computador consultando o registro. Eu gostaria especificamente de alguns para verificar se o status de atualização do computador é "totalmente atualizado".

Examinei muitas entradas no registro, mas não consegui encontrar uma que tenha o status de atualização do computador.

Quais opções devo verificar no status de atualização do Windows?

    
por user1888089 08.01.2018 / 12:57

2 respostas

3

O mais próximo do registro que eu posso encontrar é o arquivo Windows Update log . A única outra maneira é acessá-lo por meio da API COM .

Falei com o gerente da Microsoft responsável por Windows Update (Dave Roth) e ele disse que você absolutamente não deveria tentar obter o status do Windows Update através do registro. Ele disse que você deve usar a API COM para obter o status executando o método de pesquisa e usando os resultados retornados para o status de atualização do seu computador.

Ele também me deu essa dica:

As a simple FYI, for checking what updates are installed calling IUpdateSearcher::Search with IsInstalled=1 will generate an updatecollection object containing all installed updates. You can walk through it to see what is already installed.

Expandindo sua dica, você poderia chamar esse método com IsInstalled=0 para ver quais atualizações não estão instaladas. (veja o exemplo do powershell abaixo).

Arquivo de registro do Windows Update

O arquivo de log do Windows Update é uma boa maneira de ver o status atual do Windows Update. Esse método seria bom se você pudesse acessar o sistema de arquivos e não tivesse acesso a APIs ou outras estruturas / plataformas e coisas do tipo.

Você pode encontrá-lo neste caminho:% %windir%\Windowsupdate.log

O arquivo de log do Windows Update possui este formato:
Date Time PID TID Component Text

Uma linha de exemplo com dados de modelo seria esta:
[date][time] [PID][TID][Component][Text]

Aqui está um exemplo completo:
2005-06-0118:30:03 992810Agent * WU client version 5.8.0.2468

Este é um exemplo em que o Windows Update Agent pesquisa atualizações disponíveis e exibe os resultados:

2005-06-0212:09:36 9924e8Agent*************
2005-06-0212:09:36 9924e8Agent** START **  Agent: Finding updates [CallerId = WindowsUpdate]
2005-06-0212:09:36 9924e8Agent*********
2005-06-0212:09:36 9924e8Agent  * Added update {AC94DB3B-E1A8-4E92-9FD0-E86F355E6A44}.100 to search result
2005-06-0212:09:37 9924e8Agent  * Found 6 updates and 10 categories in search

Em sistemas modernos, você precisará executar o commandlet do PowerShell Get-WindowsUpdateLog , pois o log agora não está mais armazenado no log, o log é armazenado em etl files. O comando irá compilar o arquivo WindowsUpdate.log de todos os arquivos etl e disponibilizá-lo (por padrão) na pasta Desktop do usuário atual.

Aqui está a descrição do comando:

The Get-WindowsUpdateLog cmdlet merges and converts Windows Update .etl files into a single readable WindowsUpdate.log file. Windows Update Agent uses Event Tracing for Windows (ETW) to generate diagnostic logs. Windows Update no longer directly produces a WindowsUpdate.log file. Instead, it produces .etl files that are not immediately readable as written.

This cmdlet requires access to a Microsoft symbol server.

API COM

A API COM é uma boa maneira de acessar diretamente o Windows Update sem precisar analisar logs. As aplicações desta API vão desde encontrar atualizações disponíveis no computador até instalar e desinstalar atualizações.

Você pode usar a classe Microsoft.Update.Session para executar uma pesquisa de atualização e contar o número de atualizações disponíveis para ver se há atualizações para o computador.

Exemplo do PowerShell:

$updateObject = New-Object -ComObject Microsoft.Update.Session
$updateObject.ClientApplicationID = "Serverfault Example Script"
$updateSearcher = $updateObject.CreateUpdateSearcher()
$searchResults = $updateSearcher.Search("IsInstalled=0")
Write-Host $searchResults.Updates.Count

Se o resultado retornado for maior que 0, haverá atualizações para o computador que precisa ser instalado e / ou baixado. Você pode atualizar facilmente o script do PowerShell para se adequar ao seu aplicativo.

Apenas no heads-up, parece que a função de pesquisa não é assíncrona, por isso congelaria o aplicativo durante a pesquisa. Nesse caso, você vai querer torná-lo assíncrono.

Tl; Dr

Se você estiver criando um tipo de aplicativo não script (compilado) (com exceção do PowerShell que tem acesso a COM APIs), recomendamos usar a API COM . Caso contrário, a análise de log seria sua melhor opção.

Links

Como ler o arquivo de registro:
link

cmdlet de compilação de log do PowerShell:
link

Referência da API do Com32:
link

    
por 08.01.2018 / 20:53
1

A Microsoft agora está usando o valor UBR (Unified Build Revision) para identificar o nível de patch. O valor foi adicionado pela primeira vez no Windows 10

,masagoraéportadoparaoWindows7

eWindows8.1também

Portanto,consulteovalorUBRemHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersioneconsulteapáginaHistóricodeatualizações(para Windows 10 v1709 como exemplo) para o valor KB123456 (OS Build 16299.XYZ) no lado esquerdo:

Aqui você pode ver que meu 1709 está totalmente atualizado com a última atualização.

    
por 17.01.2018 / 17:34