Como faço para agendar um arquivo em lotes para ser executado na inicialização ou no desligamento?

1

Eu tenho 2 arquivos em lote que enviam e-mails destinados a notificar o desligamento ou a inicialização de um servidor. Os arquivos em lote chamam um exe com um único argumento, a mensagem a ser enviada. O exe vem de um programa vb.net usando system.net.mail.

Os arquivos em lote funcionam corretamente em um prompt de comando e os e-mails são recebidos.

Agora, quero que esses arquivos em lote sejam executados automaticamente quando o sistema operacional for iniciado e quando o sistema operacional estiver sendo desligado, sem que nenhum usuário precise fazer logon.

Eu tentei testar isso em uma máquina Win 8.1 que, acredito, deve funcionar da mesma forma que no Server 2012 R2. Se esta é uma suposição ruim, por favor avise.

Então, aqui está o que eu tentei:

1) Agendador de Tarefas (mas somente para inicialização, não há opção de desligamento)

2) Editor de política de grupo local > Configuração do Computador > Configurações do Windows > Scripts (inicialização / desligamento)

Em ambos os casos, a configuração parece bastante simples, mas os emails nunca são enviados.

Alguém pode me dar ideias sobre considerações que claramente não estou pensando?

O problema é permissões? Como eu saberia disso?

O problema "parece agendado, mas não é"?

O problema é que arquivos em lote não podem ser usados dessa maneira?

Como esta é a primeira vez que faço isso, tenho certeza de que estou sentindo falta de algo básico.

    
por Alan 01.05.2015 / 21:44

3 respostas

1
Estudar e usar os comentários e as respostas de todos realmente ajudou a resolver meu problema, mas, como às vezes acontece, o problema real era um pouco diferente. Então, sinto-me obrigado a postar o que acabou por ser o problema real para mim no caso de alguém ser pego pela mesma 'pegadinha'.

Durante o teste do script, pareceu mais conveniente para trabalhar na minha máquina Win 8.1; Acontece que não foi. Eu tinha assumido que minha máquina Win 8.1 funcionaria de forma idêntica ao servidor 2012 R2; minha suposição estava errada.

No instante em que mudei tudo para os servidores 2012 R2, os scripts funcionaram perfeitamente e desde então. Eu não posso explicar por que a máquina Win 8.1 reagiu de forma diferente, apenas fez.

Então, minha solução foi não usar mais uma máquina Win 8 ou 8.1 para testar scripts de inicialização / desligamento, basta fazê-lo no servidor de destino.

(Desculpe pela resposta atrasada, eu estava fora da cidade em uma viagem prolongada)

    
por 08.06.2015 / 23:06
1

Isso realmente não é uma resposta devido às duas limitações citadas abaixo, mas é muito longo para um comentário, então ...

Eu fiz um teste simples com as seguintes deficiências:

  1. Os scripts não enviam e-mail. Eu preciso do revezamento SMTP do meu ISP, mas é muito trabalhoso encontrá-lo.
  2. Estou testando em uma prévia do Win10, não no Win8.1. É tudo que tenho esta noite.

Dentro de Local Group Policy Editor > Computer Configuration > Windows Settings > Scripts (Startup/Shutdown) , coloquei um script powershell de inicialização no diretório startup e um script powershell de desligamento no diretório shutdown .

Tomei um cuidado especial ao adicionar os scripts na guia Powershell Scripts dentro de cada um dos nós da política de inicialização e encerramento.

Eu me certifiquei de ter um diretório chamado c:\temp , pois eu estava com preguiça de criar scripts.

Também verifiquei se os scripts do powershell são permitidos executando:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Aqui está o script de inicialização:

if (!(Test-Path c:\temp\log.txt)) {New-Item -ItemType file -Path c:\temp\log.txt}
$timestamp = get-date 
$string = "$timestamp UP!"
$string | Out-File -FilePath c:\temp\log.txt -Append -NoClobber

Aqui está o script de desligamento:

if (!(Test-Path c:\temp\log.txt)) {New-Item -ItemType file -Path c:\temp\log.txt}
$timestamp = get-date 
$string = "$timestamp DOWN!"
$string | Out-File -FilePath c:\temp\log.txt -Append -NoClobber

Eu reiniciei o computador. Aqui está o conteúdo do arquivo c:\temp\log.txt :

06/01/2015 00:07:45 DOWN!
06/01/2015 00:08:10 UP!

Eu esperaria o mesmo resultado com o envio de um e-mail, mas não é possível ter certeza, é claro, até que alguém realmente tente.

    
por 01.06.2015 / 00:31
-2

Vá para o visualizador de eventos, procure eventos de segurança de logon e logoff, clique com o botão direito e adicione uma tarefa para esse evento que envia um email.

É a melhor maneira.

    
por 01.05.2015 / 21:48