Eu me refiro a esse tipo de coisa como um GPO "alçapão" e faço isso com razoável frequência (para coisas como trabalhar em computadores recém-ingressados no domínio). Se eu tiver um script que quero executar uma vez e apenas uma vez nos clientes, normalmente faço isso:
-
Crie um grupo no AD "Trapdoor Script Already Executed", e conceda direitos "Domain Computers" para que eles "All Validated Writes" e "Write members" (uma permissão específica da propriedade).
-
Crie meu script de inicialização e adicione um net group "Trapdoor Script Already Executed" /domain /add %computername%$
no final do script
-
Crie um GPO fazendo referência ao meu script de inicialização e adicione a permissão "Trapdoor Script Already Executed" / "Negar Aplicar Diretiva de Grupo" ao GPO.
Isso faz com que as máquinas se adicionem ao grupo "Trapdoor Script Already Executed" depois de executarem o script e, em futuras atualizações, lhes é negado o direito de executar o script novamente.
Editar:
Esta estratégia funciona muito mal quando os computadores-cliente não são removidos dos grupos, mas são de outra forma re-trabalhados ou re-propostos e precisam executar o script "trapdoor" novamente.
Nesses casos, opto por escrever um valor "canário" para o registro que o script possa verificar com um simples REG QUERY
e liberar errorlevel
se o valor for encontrado. O lado negativo de se fazer isso dessa maneira é que o script é executado em cada inicialização (enquanto restringir o aplicativo de GPO por meio da associação ao grupo impede que o script ocorra e demore em cada inicialização). Em teoria, você pode usar a filtragem WMI para segmentar GPOs com base em valores do Registro, mas, no passado, o desempenho da filtragem WMI baseada em valor do Registro era HORRÍVEL .
Eu tive sucesso com a estratégia "grupo de alçapão" quando consigo fazer com que os técnicos excluam computadores do AD e juntem-se a eles quando "refazem" os computadores, em vez de apenas persistir objeto de computador e seus membros de grupo. É um desafio, mas a única maneira que eu poderia conceber que não incorresse em uma penalidade de execução de script em cada inicialização.