Como posso descobrir quantas atualizações estão esperando para serem instaladas em um servidor remoto?

1

Existe uma maneira de descobrir se um Windows Server (2003, 2008) baixou as atualizações do Microsoft Windows e está apenas aguardando o usuário confirmar "Instalar Atualizações e Reiniciar o Servidor"?

Usamos o WSUS e o SSCM para coletar e publicar as atualizações, e a maioria dos servidores está em instalação automática em uma manhã de domingo, principalmente em desenvolvimento e servidor de teste.

Nós configuramos nossos servidores de produção importantes para instalar apenas manualmente, mas ocasionalmente alguns servidores não são reinicializados manualmente por um tempo (humanos esquecem!)

Seria bom se houvesse algum método (script powershell, consulta WMI, algum comando mágico) que eu pudesse usar para contar ou descobrir se há atualizações pendentes.

    
por Guy 22.09.2010 / 19:02

5 respostas

5

Aqui está o script que eu escrevi. Ele vai te dizer:

  • Quantos patches estão esperando para serem instalados
  • Se os patches exigirem uma reinicialização
  • Se o servidor estiver aguardando uma reinicialização para ativar as correções

Exemplo de uso: C:\> cscript ServerPendingUpdates.vbs myserver01 myserver02

Connecting to myserver01 to check software update status...
myserver01 has 2 updates pending installation
myserver01 WILL need to be rebooted to complete the installation of these updates.
myserver01 is waiting for a REBOOT to complete a previous installation.

<snip>

Script:

'#
'# ServerPendingUpdates.vbs
'#
'# Usage: cscript ServerPendingUpdates.vbs {servername} {servername} {servername} {servername}
'#    If no {servername} specified then 'localhost' assumed
'#
'# To do: Error handling
'#
Option Explicit
Dim strServer        : strServer         =  GetArgValue(0,"localhost")


'#
'# Loop through the input parameters for each server
'#
Dim i
For i = 0 To WScript.Arguments.Count - 1
    CheckServerUpdateStatus GetArgValue(i,"localhost") 'strServer
Next

WScript.Quit(0)

Function CheckServerUpdateStatus( ByVal strServer )

    WScript.Echo vbCRLF & "Connecting to " & strServer & " to check software update status..."

    Dim blnRebootRequired    : blnRebootRequired     = False
    Dim blnRebootPending    : blnRebootPending     = False
    Dim objSession        : Set objSession    = CreateObject("Microsoft.Update.Session", strServer)
    Dim objUpdateSearcher     : Set objUpdateSearcher    = objSession.CreateUpdateSearcher
    Dim objSearchResult    : Set objSearchResult     = objUpdateSearcher.Search(" IsAssigned=1 and IsHidden=0 and Type='Software'")

    '#
    '#
    '#
    Dim i, objUpdate
    Dim intPendingInstalls    : intPendingInstalls     = 0

    For i = 0 To objSearchResult.Updates.Count-1
        Set objUpdate = objSearchResult.Updates.Item(I) 

        If objUpdate.IsInstalled Then
            If objUpdate.RebootRequired Then
                blnRebootPending     = True
            End If
        Else
            intPendingInstalls    = intPendingInstalls + 1
            'If objUpdate.RebootRequired Then    '### This property is FALSE before installation and only set to TRUE after installation to indicate that this patch forced a reboot.
            If objUpdate.InstallationBehavior.RebootBehavior <> 0 Then
                '# http://msdn.microsoft.com/en-us/library/aa386064%28v=VS.85%29.aspx
                '# InstallationBehavior.RebootBehavior = 0    Never reboot
                '# InstallationBehavior.RebootBehavior = 1    Must reboot
                '# InstallationBehavior.RebootBehavior = 2    Can request reboot
                blnRebootRequired     = True
            End If

        End If
    Next

    WScript.Echo strServer & " has " & intPendingInstalls & " updates pending installation"

    If blnRebootRequired Then
        WScript.Echo strServer & " WILL need to be rebooted to complete the installation of these updates."
    Else
        WScript.Echo strServer & " WILL NOT require a reboot to install these updates."
    End If


    '#
    '#
    '#
    If blnRebootPending Then
        WScript.Echo strServer & " is waiting for a REBOOT to complete a previous installation."
    End If 
End Function



'#
'#
'#
Function GetArgValue( intArgItem, strDefault )
    If WScript.Arguments.Count > intArgItem Then
        GetArgValue = WScript.Arguments.Item(intArgItem)
    Else
        GetArgValue = strDefault
    End If
End Function
    
por 23.09.2010 / 17:57
2

você pode usar o wuinstall . Ele tem um / switch de pesquisa para ver se há atualizações pendentes. Você pode executar remotamente com psexec.

Outra opção é analisar o% windir% \ windowsupdate.log e procurar por itens como este: # AVISO: Chamada de instalação concluída, reinicialização requerida = Sim, erro = 0x00000000

    
por 22.09.2010 / 20:18
2

Eu uso o UpdateHf. vbs script de autoria de Rob Dunn & contribuidores. Como ele é executado localmente no host que está relatando, eu o instalei em todas as minhas máquinas. Eu criei um pacote MSI e o enviei via GPO.

Para acionar o relatório, tenho uma coleção de scripts do PowerShell que criam tarefas agendadas em uma UO de servidores, em que cada computador está agendado para executar o UpdateHF.vbs localmente e enviar-me os resultados por e-mail. Em seguida, uso as regras de classificação para codificar os e-mails resultantes com base na pesquisa de texto distinto no relatório.

O UpdateHF.vbs é basicamente um invólucro da API de Atualizações Automáticas publicada pela Microsoft, então com algumas pesquisas aposto que você poderia descobrir qual bit de script lida com a verificação "Reboot Pending", se tudo que você quisesse fosse um sinalizador booleano de status de reinicialização .

Aqui está o núcleo do meu sistema: Powershell preenche as variáveis em uma chamada para schtasks.exe. (Observe que, se a senha tiver caracteres complexos, você precisará escapar deles com um backtick.)

schtasks.exe /create /F /S $TargetHost /tn Patch /sc once /st $TargetTime /sd $StartDate /ru User /rp Password /tr "$WinPath\system32\cscript.exe $WinPath\UpdateHF.vbs $UpdateArgs"
    
por 22.09.2010 / 21:05
2

Como administrador da caixa remota, abra um MMC e adicione o Visualizador de Eventos Snapin. Selecione "Outro Computador" (versus o padrão de "Computador Local" e insira o nome do computador de destino. Em seguida, filtre por tipo de evento para ver apenas os que você deseja! Ele é chamado de "Windows Update Agent" e a descrição começará com

"Installation Ready: The following updates are downloaded and ready for installation. This computer is currently scheduled to install these updates on [date]..."

    
por 22.09.2010 / 21:55
-1

No servidor R2 de 2012, vá para o painel de controle e clique em Atualizações do Windows. No painel esquerdo da página, clique no link "Verificar atualizações", você verá a lista de atualizações pendentes (ainda a ser instalado no servidor). Clique em qualquer um dos links para ver a lista inteira (opcional e obrigatória) com a breve descrição de cada um deles.

Por favor, note que esta instalação automática para atualizações deve ser ativada.

    
por 15.05.2017 / 13:19