Agendador de tarefas do Windows - execute uma tarefa uma vez por dia ao fazer logon

Agendador de tarefas do Windows - execute uma tarefa uma vez por dia ao fazer logon

Estou tentando configurar uma tarefa agendada para executar um exe exatamente uma vez por dia. Eu tentei o seguinte:

Acionar diariamente às 4h, "executar a tarefa o mais rápido possível após a perda de um início programado"

Essa abordagem funciona perfeitamente se eu não tiver uma senha definida em minha conta; nesse caso, o Windows inicializa diretamente na área de trabalho - após um pequeno atraso, a tarefa é executada.

Quando adicionei uma senha à minha conta, a tarefa não foi mais executada. No histórico de tarefas, vejo avisos sendo registrados:

O Agendador de Tarefas não iniciou a tarefa "X" porque o usuário "Y" não estava conectado quando as condições de inicialização foram atendidas. Ação do usuário: Certifique-se de que o usuário esteja conectado ou altere a definição da tarefa para permitir a inicialização quando o usuário estiver desconectado.

Parece um aviso estúpido - em "Opções de segurança", selecionei "Executar somente quando o usuário estiver conectado". Por que o Agendador de Tarefas está tentando iniciar a tarefa antes do usuário fazer logon?

Acione diariamente às 4h e "no logon", execute o mais rápido possível

Esta abordagem não teve o efeito que eu pretendia, ou seja, eu queriaambosas condições sejam verdadeiras, ou seja, se "depois das 4h00 diariamente" for verdadeiro e "fazer logon" for verdadeiro, execute a tarefa; e para cada evento de "login" sucessivo naquele dia, o "depois das 4h diariamente" não será verdadeiro, portanto aguardará o dia seguinte. Infelizmente, não é assim que o Agendador de Tarefas funciona e, com essa abordagem, a tarefa é executada apóstodoentrar.

Execute se o usuário estiver conectado ou não

Não posso usar essa abordagem porque o exe que estou tentando executar às vezes requer a entrada do usuário quando estiver concluído. Em geral, há vários motivos pelos quais alguém pode não conseguir usar esta opção.

Outras opções

No mundo das soluções alternativas desesperadas, estou pensando em escrever um script em lote que será gravado em um arquivo e será capaz de detectar se ele já foi chamado antes.

Certamente deve haver uma maneira melhor de alcançar esse caso de uso de agendamento aparentemente comum e simples.

Responder1

Execute uma tarefa uma vez por dia ao fazer logon

Estou tentando configurar uma tarefa agendada para executar um exe exatamente uma vez por dia.

Estou pensando em escrever um script em lote que será gravado em um arquivo e será capaz de detectar se ele foi chamado antes.

Ok, então o exemplo abaixo com lógica de script em lote muito básica e simples, como você afirmou no comentário, pode ser útil no seu caso de acordo com os problemas que você está enfrentando.

Também farei referência a outra postagem (no final desta resposta) sobre o Agendador de Tarefas com pegadinhas, etc., caso você tenha mais problemas com o Agendador de Tarefas que não funciona conforme o esperado ao executar o script em lote. Mesmo que as opções que você escolhe especificamente na configuração possam ser diferentes, assim como o sistema operacional, as pegadinhas neste nível provavelmente ainda são as mesmas, então dê uma olhada rápida nessa postagem também se você tiver problemas com o agendamento em lote com o Agendador de Tarefas não funcionando conforme o esperado.


Análise básica do script

  • O FOR /Floop cria a YYYYMMDDvariável a ser usada para a data atual.

  • É CheckDirum caminho de unidade local ou mesmo um caminho UNC onde \\servername\sharename\foldervocê colocará este pequeno arquivo de verificação com a YYYYMMDDparte do nome do arquivo todos os dias.

    • Basta alterar C:\Pathou conectar o caminho UNC para onde ele precisa apontar em seu ambiente
  • É checkfileAPENAS o nome do arquivo com o %CheckDir%\na frente e %DT%anexado ao final antes da extensão .txt. Por exemplo, lhe dará um resultado final C:\Path\VersionBackup_20130202.txtpara hoje, como no meu exemplo.

    • Isto irá essencialmente verificar se o arquivo existe para hoje, em caso afirmativo, encerre o script, se não existir, crie-o e execute o VersionBackup.exe de qualquer que seja o nome do EXE. Desta forma, isso pode ser agendado com o Agendador de Tarefas para uma vez por hora apontando para o script em lote e de acordo com a lógica do script em lote, só será permitido executar uma vez por dia.
  • Basta START "" "C:\Path\VersionBackup.exe"apontar para o caminho completo onde existe o nome do EXE que faz a operação de backup da versão.

Exemplo de script em lote

@ECHO ON

:::: SET YYYYMMDD format for date
FOR /F "TOKENS=2-4 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%C%%B%%A"

:SetCheckFile
SET CheckDir=C:\Path
SET checkfile=%CheckDir%\VersionBackup_%DT%.txt
IF NOT EXIST "%CheckDir%" MD "%CheckDir%"
IF EXIST "%checkfile%" GOTO EOF
ECHO Creating the check file for date %DT% to ensure only one Version Backup run for the day>>"%checkfile%"

:StartApp
START "" "C:\Path\VersionBackup.exe"
GOTO EOF

Responder2

Solte o .exe em uma das seguintes pastas para executá-lo quando o computador for inicializado. Você não terá que fazer nada no Agendador de Tarefas.

Apenas para o usuário atual:

C:\Usuários\nome de usuário\AppData\Roaming\Microsoft\Windows\Menu Iniciar\Programas\Inicializar

Para todos os usuários:

C:\ProgramData\Microsoft\Windows\Menu Iniciar\Programas\Inicializar

Espero que isto ajude!

informação relacionada