Como parte de um script de automação de construção de sistema (que estou usando para criar AWS AMIs), quero que o sistema seja reinicializado e execute tarefas adicionais de configuração pós-inicialização - mas apenas uma vez (para que quando o sistema seja criado e, em seguida, a imagem usada para iniciar uma nova instância, ela não executará as tarefas de configuração pós-inicialização novamente.
A maneira como comecei a implementar isso é que o script de configuração inicial (escrito em Powershell) usa Register-ScheduleJob -Trigger (New-JobTrigger -AtStartup) ... -Name PostBootSetup
para configurar outro script Powershell imediatamente após a inicialização. No script de pós-inicialização, tenho:
Get-JobTrigger -Name PostBootSetup | ?{$_.Enabled} | Disable-JobTrigger
Mas quando é executado, recebo este erro (estou registrando todas as saídas do script de pós-inicialização em um arquivo):
Powershell : A scheduled job definition with Name PostBootSetup could not be found.
O que é estranho porque essa é a saída do trabalho que está sendo executado atualmente. Eu também adicionei apenas chamadas simples para Get-ScheduledJob
e Get-JobTrigger -Name PostBootSetup
que devem produzir os registros relevantes, mas não há absolutamente nenhuma saída disso - mesmo que, se eu executar esses comandos em um console Powershell após o início da máquina, a saída esperada.
É possível que um trabalho não possa acessar seu próprio registro de trabalho agendado durante a execução? Em caso afirmativo, existe uma solução alternativa? Ou eu estou esquecendo de alguma coisa? Se este não for um bom método para fazer um trabalho pós-inicialização único, o que você sugeriria?
Como nota adicional, eu não estou muito confortável em lote, então eu aprecio soluções que usam Powershell ou .Net ou algo que é mais expressivo que um lote.