Agendando uma tarefa única para ser executada na inicialização do Windows Server 2012R2

3

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.

    
por Guss 21.09.2015 / 17:17

1 resposta

2

Use uma das chaves do Registro RunOnce, elas foram projetadas exatamente para esse tipo de tarefa.
Elas são executadas uma vez e depois desaparecem.

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ RunOnce
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ RunOnce

Crie uma nova chave de valor de string onde o nome é qualquer um, e os dados são o EXE da CLI e alterna para o que você deseja executar.
link

PS C:\> new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce -name "myInstall" -value '"c:\temp\borland\setup.exe" /this /that /other'
    
por 21.09.2015 / 20:39