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

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

Tenho 2 arquivos em lote que enviam e-mails com a intenção de notificar sobre o desligamento ou inicialização do 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.

Tentei testar isso em uma máquina Win 8.1 que acredito que deveria funcionar da mesma forma que no Server 2012 R2. Se esta for uma suposição ruim, por favor informe.

Então aqui está o que eu tentei:

1) Agendador de tarefas (mas apenas 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 parecia bastante simples, mas os e-mails nunca são enviados.

Alguém pode me dar idéias sobre considerações nas quais claramente não estou pensando?

O problema são as permissões? Como eu saberia disso?

O problema é "Parece programado, mas não está"?

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

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

Responder1

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

Fiz um teste simples com as duas deficiências a seguir:

  1. Os scripts não enviam email. Preciso do relé SMTP do meu ISP, mas é muito trabalhoso encontrá-lo.
  2. Estou testando em uma visualização do Win10, não no Win8.1. É tudo o que tenho esta noite.

Dentro de Local Group Policy Editor > Computer Configuration > Windows Settings > Scripts (Startup/Shutdown), coloquei um script do PowerShell de inicialização no startupdiretório e um script do PowerShell de desligamento no shutdowndiretório.

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

Eu me certifiquei de ter um diretório chamado c:\tempporque estava com preguiça de criar um script para ele existir.

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 então reiniciei o computador. Aqui está o conteúdo do c:\temp\log.txtarquivo:

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

Eu esperaria o mesmo resultado ao enviar um e-mail, mas não podemos ter certeza até que realmente tentemos.

Responder2

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

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

No instante em que mudei tudo para meus servidores 2012 R2, os scripts funcionaram perfeitamente e têm funcionado desde então. Não consigo explicar por que a máquina Win 8.1 reagiu de maneira diferente, simplesmente reagiu.

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

(Desculpe pela demora na resposta, estava fora da cidade em uma viagem prolongada)

Responder3

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

É a melhor maneira.

informação relacionada