Como posso automatizar a criação do script de encerramento do GPO?

1

Estou gerenciando VMs do Windows em AWS ASGs que não estão anexados a um domínio. Eu quero executar um script no desligamento ( não logoff) para remover esses nós do Chef, e eu quero criar / registrar os scripts usando o Chef. Eu tenho o script de remoção pronto, ele está sendo executado no desligamento que não consigo encontrar uma implementação para.

Eu posso fazer isso manualmente via gpedit.msc Política de computador local - > Configuração do Computador - > Configurações do Windows - > Scripts (Iniciar / Desligar) - > Desligar. Isso coloca os scripts em C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdown . Infelizmente:

  • Parece que os diretórios de scripts são criados apenas quando o gpedit.msc é executado pela primeira vez e não está claro se criá-los manualmente é válido
  • Apenas colocar scripts lá não parece registrá-los - eles não aparecem em gpedit.msc
  • Colocar o script e executar gpupdate /force (como sugerido aqui ) também não faz com que ele apareça gpedit, embora o gpupdate tenha sugerido que uma reinicialização pode ser necessária para aplicar algumas alterações - isso não é uma opção, já que uma reinicialização em um ASG pode causar a finalização e a substituição da instância

Estou ciente de um possível uso do Agendador de Tarefas para executar um script no desligamento, mas (pelo menos da minha pesquisa) parece que a principal diferença é que um script de desligamento do agendador de tarefas tem tanto tempo para executar quanto o sistema é desligado, enquanto um script de desligamento do GPO adia o desligamento até que seja concluído.

Portanto, a pergunta é: existe uma maneira, por meio do Chef (via PowerShell, DSC ou script em lote), de registrar um script de desligamento do GPO em uma máquina não anexada ao AD sem reinicializar?

    
por Adrian 09.08.2017 / 19:03

2 respostas

1

Graças à percepção da resposta da @ Clayton e da esta resposta a outra pergunta, consegui que ela funcionasse Win2016. Eu tive que criar C:\Windows\System32\GroupPolicy\Machine\Scripts\psscripts.ini :

[Startup]
0CmdLine=C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdown\seppuku.ps1
0Parameters=

Além de definir uma série de chaves de registro:

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\ShutdownHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\ShutdownHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\ShutdownHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\ShutdownHKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\ShutdownHKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\Shutdown\Shutdown\ShutdownC:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdown\seppuku.ps1gpedit.msc%code%%code%%code%
  • %code%
  • %code%
  • %code%
  • %code%
  • %code%

Aqueles que terminam em %code% obtêm valores de política:

"GPO-ID"="LocalGPO"
"SOM-ID"="Local"
"FileSysPath"="C:\Windows\System32\GroupPolicy\Machine"
"DisplayName"="Local Group Policy"
"GPOName"="Local Group Policy"
"PSScriptOrder"=dword:00000001

Aqueles que terminam em %code% obtêm valores de script:

"Script"="C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdown\seppuku.ps1"
"Parameters"=""
"IsPowershell"=dword:00000001
"ExecTime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

Isso é para um script de desligamento do PowerShell localizado em %code% . Definir tudo isso é uma dor, mas totalmente possível usando o Chef, e depois de uma convergência, vejo o script registrado em %code% . Eu ainda tenho que confirmar completamente o script realmente executa no desligamento, esse é o meu próximo passo, mas acredito que deveria.

    
por 10.08.2017 / 17:08
1

Tente usar este utilitário LGPO. Você deve ser capaz de usar a GUI para configurar o script de desligamento em uma máquina piloto, fazer o backup com o LGPO e usar o LGPO para importá-lo para sistemas recém-construídos.

link

    
por 09.08.2017 / 20:55