Planejamos automatizar a criação de VMs para nossa infraestrutura de construção, para que possamos:
- Escale os recursos de construção com base na demanda, por exemplo, adicionando mais agentes de construção quando necessário e removendo-os quando não necessário
- Recrie todo ou parte do ambiente de construção se / quando as máquinas morrerem
- Duplique o ambiente de construção quando precisarmos de uma configuração de teste
Uma das etapas deste processo é automatizar a criação das imagens base da VM (no nosso caso, usando o Hyper-V). Para isso, temos um script que:
- Cria um novo VHDX da ISO com o script Convert-WindowsImage . Atualmente, estamos usando o Windows 2012R2, mas pretendemos começar com 2016 assim que disponível.
- Adiciona um script autônomo ao novo VHDX com toda a configuração básica que precisamos
- Atualiza o VHDX com os patches mais recentes do Windows usando o script Apply-WindowsUpdate
- Cria uma nova VM Hyper-V baseada no VHDX e a inicia
- Aguarda a inicialização da VM e aguarda o serviço WinRM estar pronto para aceitar conexões remotas
- Aguarda o Windows concluir a configuração inicial e a configuração dos novos patches
- Aplica outros patches
- Reinicia para concluir a configuração dos patches mais recentes
- Aguarda o Windows concluir a configuração dos patches
- Envia um script sysprep para a máquina e chama esse script. Isso executa o sysprep e depois desliga a máquina
- Exclui a VM, mas mantém o VHDX
- Remove sysprep e arquivos autônomos do VHDX e depois compacta o VHDX
- Move 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 toda a configuração seja concluída antes de reiniciar / desligar a máquina, mas não parece haver uma maneira de detectar se o Windows terminou o estágio de configuração.
Ao percorrer a interface do usuário, fica muito claro quando uma das etapas é concluída porque a interface do usuário de logon não aparece até que o processo esteja pronto. No entanto, ao usar o WinRM para conectar-se remotamente à máquina, isso fica menos claro porque o WinRM fornece acesso à máquina antes de concluir o trabalho de configuração.
Portanto, a questão é qual é a maneira mais segura de detectar através de uma conexão remota que o Windows concluiu a configuração de atualizações etc. para que possamos reiniciar / desligar a máquina sem causar problemas mais tarde.
------ EDIT -----
No final, estamos usando uma versão modificada da resposta de Katherine, pois nosso script também espera windeploy
e ngen
é concluído. Dado que ngen
não é concluído até bem após o término da inicialização do sistema operacional, e como um bônus, o VHDX final terá todo o framework .NET ngen-ed, o que significa que não precisamos lidar com isso quando criarmos novos VMs do disco de modelo. Tanto o script que usamos para criar o modelo VHDX quanto os scripts para criar o ambiente de teste local estão no github, caso alguém esteja interessado.
fonte
Cada patch de atualização do Windows gravará vários eventos no log de eventos da Instalação.
Uma maneira de determinar que todos os patches foram aplicados seria executar uma verificação no ID do Evento 4. Compare a hora desse evento com a hora atual. Se nenhum evento ID 4 tiver sido gravado por 5 ou 10 minutos, todos os pataches provavelmente estão concluídos e prontos para reiniciar.
Não sei se você deseja fazer a primeira reinicialização quando os patches forem concluídos na instalação (evento4) ou a segunda reinicialização após a conclusão da configuração (evento 2). Este código faz o primeiro. Simplesmente altere o filterHashTable para a identificação de evento 2 da outra reinicialização antes da etapa 10.
fonte
Tive sucesso com a seguinte abordagem: Aguarde até que o Windows altere o tipo de inicialização do Serviço Instalador de Módulos 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.
Às vezes, o processo do Trusted Installer continua em execução após a instalação dos patches? 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 é consistente / correta, observando as mensagens anteriores do log de eventos e correlacionando eventos entre os logs do sistema e da instalação.
A alteração de inicialização para o Windows Module Installer é registrada como um evento do sistema 7040 e se correlaciona com o último evento 2 no log da instalação, após uma reinicialização.
Penso que, quando as atualizações são instaladas pela primeira vez, esse serviço é definido como 'Auto Start', caso seja necessário reiniciar. É definido como 'Manual' quando o último patch é instalado (independentemente de uma reinicialização ser necessária).
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. Suspeito que seja algum aplicativo que verifique regularmente se há atualizações. Mas, pela minha experiência, é que geralmente parece seguro supor que, se a inicialização for Manual, não ocorrerá o patch.
fonte