Como detectar remotamente o Windows concluiu a configuração do patch após a reinicialização

10

Estamos planejando automatizar a criação de VMs para nossa infraestrutura de criação para que possamos:

  1. Redimensione os recursos de criação com base na demanda, por exemplo, adicionando mais agentes de compilação quando necessário e removendo-os quando não for necessário
  2. Recriar todo ou parte do ambiente de criação se / quando as máquinas morrerem
  3. Duplique o ambiente de criação quando precisarmos de uma configuração de teste

Uma das etapas desse processo é automatizar a criação das imagens básicas da VM (no nosso caso, usando o Hyper-V). Para isso temos um script que:

  1. Cria o novo VHDX da ISO com o script Convert-WindowsImage . No momento, estamos usando o Windows 2012R2, mas pretendemos começar com 2016 assim que estiver disponível.
  2. Adiciona um script autônomo ao novo VHDX com toda a configuração básica que precisamos
  3. Atualiza o VHDX com as correções mais recentes do Windows usando o script Apply-WindowsUpdate
  4. Cria uma nova VM do Hyper-V com base no VHDX e a inicia
  5. Aguarda a inicialização da VM e espera que o serviço WinRM esteja pronto para aceitar conexões remotas
  6. Aguarda janelas para concluir a configuração inicial e a configuração das novas correções
  7. Aplica quaisquer outras correções
  8. Reinicializa para concluir a configuração dos patches mais recentes
  9. Aguarda que as janelas concluam a configuração das correções
  10. Envia um script sysprep para a máquina e chama esse script. Isso executa o sysprep e, em seguida, desliga a máquina
  11. Exclui a VM, mas mantém o VHDX
  12. Remove arquivos sysprep e autônomos do VHDX e compacta o VHDX
  13. Move o VHDX para o local do modelo e marca como somente leitura

O problema que estamos enfrentando está nas etapas 6 e 9. Idealmente, esperamos que todas as configurações sejam concluídas antes de reinicializá-las / desligá-las, mas não parece haver uma maneira de detectar que as janelas terminaram estágio de configuração.

Ao passar pela interface do usuário, fica muito claro quando uma das etapas é executada, pois a interface do usuário de login não é exibida até que o processo esteja pronto. No entanto, ao usar o WinRM para se conectar remotamente à máquina, isso é menos claro, pois o WinRM fornece acesso à máquina antes que seja feito com o trabalho de configuração.

Portanto, a questão é qual é a maneira mais fácil de detectar através de uma conexão remota que o Windows terminou de configurar as atualizações, etc., para que possamos reiniciar / desligar a máquina sem causar problemas mais tarde.

------ EDIÇÃO -----

No final, estamos usando uma versão modificada da resposta de Katherine, pois nosso script também aguarda que windeploy e ngen sejam concluídos. Dado que ngen não é concluído até bem depois que o sistema operacional terminar de inicializar os trabalhos, e como bônus, o VHDX final terá todo o framework .NET gerenciado, o que significa que não temos que lidar com isso quando criamos novas VMs do disco de modelo. Ambos os scripts que usamos para criar o O modelo VHDX e os scripts para criar o ambiente de teste local estão no github no caso de alguém estar interessado.     

por Petrik 21.01.2016 / 22:13

3 respostas

6

Isso pode soar como uma resposta estranha, mas ...

Há um script do PowerShell para verificar a veja se há atualizações disponíveis para o Nagios . Você provavelmente poderia usar esse script ou uma variante para seus propósitos, sem o Nagios.

Quanto a saber se eles estão em andamento, verifique se o Wuauclt e o TrustedInstaller estão em execução. O conselho da Microsoft sobre atualizações no Server Core pode ajudar aqui :

Depending on the updates that are installed, you might need to restart the computer, although the system will not notify you of this. To determine if the installation process has completed, use Task Manager to verify that the Wuauclt or Trusted Installer processes are not actively running. You can also use the methods in the “Viewing installed updates” section to check the list of installed updates.

Provavelmente, você pode obter essas informações com algo como Get-Process -Computername YourImage TrustedInstaller.exe . Após os processos Wuauclt e TrustedInstaller terem terminado, deve ser seguro reinicializar.

    
por 21.01.2016 / 22:18
3

Cada atualização do Windows gravará vários eventos no log de eventos da Instalação.

  • ID do evento 1 - Iniciando alterações para o pacote KB ####
  • ID do evento 4 - Uma reinicialização é necessária antes que o pacote KB #### possa ser alterado para o estado instalado
  • ID do evento 2 - O pacote KB #### foi alterado com sucesso para o Estado instalado

Uma forma de determinar se todas as correções foram aplicadas seria fazer um loop na ID de Evento 4. Compare a hora desse evento com a hora atual. Se nenhuma ID de evento 4 tiver sido gravada por 5 ou 10 minutos, provavelmente todas as pataches estarão prontas para serem reinicializadas.

Não estou claro se você deseja fazer a primeira reinicialização quando as correções forem concluídas na instalação (event4) ou a segunda reinicialização após a conclusão da configuração (evento 2). Este código faz o primeiro. Basta alterar o filterHashTable para o ID do evento 2 para a outra reinicialização antes da etapa 10.

$target = "bart"
$found = $false
while (-not $found) {
    $lastEvent4 = (get-winevent -comp $target -maxEvents 1 -filterHashTable @{ Logname='Setup'; id = '4';}).timeCreated
    if (((get-date) - $lastEvent4).totalMinutes -gt 10) {
        "do reboot"
        restart-computer -comp -$target
        $found = $true
    } else {
        "wait"
        start-sleep 60
    }
}
    
por 21.01.2016 / 23:32
0

Eu tive um bom sucesso com a seguinte abordagem: Aguarde até que o Windows altere o tipo de inicialização do Serviço Instalador do Módulo do Windows (também conhecido como TrustedInstaller) para Manual (Início da Demanda) - após uma reinicialização. Nesse ponto, as atualizações concluíram a instalação.

O processo Trusted Installer, às vezes, continua a ser executado depois que os patches foram instalados? No entanto, o tipo de inicialização do serviço ainda é redefinido para Manual.

Você pode verificar por si mesmo, se a observação acima estiver consistente / correta, observando as mensagens de log de eventos anteriores e correlacionando eventos entre os registros do Sistema e do Programa de Instalação.

A alteração de inicialização do Instalador do Módulo do Windows é registrada como um evento do Sistema 7040 e está correlacionada ao último Evento 2 no log da Instalação, após a reinicialização.

Acho que, quando as atualizações são instaladas pela primeira vez, esse serviço é definido como "Início automático" para o caso de uma reinicialização ser necessária. Ele volta para 'Manual' quando o último patch é instalado (independentemente da necessidade de reinicialização).

Em alguns servidores, notei que a inicialização confiável do Instalador é rapidamente alternada de Manual para Automática e vice-versa, e isso pode ocorrer a cada hora aproximadamente. Eu suspeito que é algum aplicativo que está regularmente verificando se há atualizações. Mas, eu experiência, é que geralmente parece seguro assumir, se a inicialização for Manual, então nenhum patch está ocorrendo.

    
por 24.03.2016 / 11:40