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

3

Eu estou tentando configurar uma tarefa de agendamento para executar um exe exatamente uma vez por dia. Eu tentei o seguinte:

Acione diariamente às 4h, "execute a tarefa o mais rápido possível depois que um início programado for perdido"

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 - depois de 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. User Action: Certifique-se de que o usuário esteja conectado ou altere a definição da tarefa para permitir o início quando o usuário efetuar logoff.

Isso parece um aviso estúpido - sob as "Opções de segurança", eu tenho "Executar somente quando o usuário está conectado" selecionado. Por que o Agendador de Tarefas está tentando iniciar a tarefa antes que o usuário faça logon?

Acione diariamente 4:00 AM e "ao fazer logon", execute o mais rápido possível

Esta abordagem não teve o efeito que eu pretendia, ou seja, eu queria ambos condições para ser verdade, ou seja, se "depois de 4:00 AM diariamente" for true e "log on" for true, execute a tarefa; e para cada evento de "logon" sucessivo daquele dia, o "depois das 4:00 da manhã diariamente" não será verdadeiro, por isso, aguardará o dia seguinte. Infelizmente, não é assim que o Agendador de Tarefas funciona e, com essa abordagem, a tarefa é executada após cada faça logon.

Executar se o usuário está conectado ou não

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

Outras opções

No campo de soluções desesperadas, estou pensando em escrever um script em lote que irá gravar em um arquivo e ser capaz de detectar se já foi chamado antes.

Certamente, deve haver uma maneira melhor de obter esse caso de uso de agendamento aparentemente comum e simples?

Jim
fonte
@ 1Fish_2Fish_RedFish_BlueFish É um programa de backup reprovado chamado VersionBackup. Basicamente, ele é executado com uma janela que exibe o progresso e, no final da execução, aparece uma janela se houver algum problema. Infelizmente, não há opções de linha de comando documentadas. No Windows 7, ele tinha uma maneira interna de executar apenas uma vez por dia, mas desde a atualização para o Windows 10 isso não funciona mais. Então, se ele for executado uma segunda vez, ele repete o processo de backup.
Jim
Bem, então você pode ser capaz de apenas criar um script em lote simples, colocar um pouco de lógica para verificar primeiro um arquivo "check" que pode ser chamado de algo como VersionBackup_20160201.txt e se ele não existir, crie-o e execute o aplicativo. Se existir, então não execute o VersionBackup.exe e saia. Desta forma, você garante por dia, por ex. & lt; AAAAMMDD & gt; que ele só é executado uma vez e cria esse arquivo antes de ser executado. Se você está intested, eu tenho um exemplo de lógica de script que eu adicionarei como uma resposta se você acha que seria potencialmente uma solução que você poderia usar ou pelo menos testar com talvez?
Pimp Juice IT
Além dos meus comentários acima, você pode me dizer se este é o site e o software que você usa e qual configuração você usa (por exemplo, cliente e servidor, mestre, etc.)? sb-aw.com/download.html
Pimp Juice IT
@ 1Fish_2Fish_RedFish_BlueFish Obrigado, isso seria útil. O site que você encontrou está correto, estou usando a versão "principal", que é sua ferramenta de consumidor não empresarial.
Jim

Respostas:

1

Executar uma tarefa uma vez por dia ao fazer logon

Eu estou tentando configurar uma tarefa de agendamento 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 já foi chamado antes.

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

Também farei referência a outro post (na parte inferior desta resposta) no Agendador de Tarefas com o método getcha, etc. para o caso de problemas com o Agendador de Tarefas não funcionarem como esperado ao executar o script em lote. Mesmo que as opções escolhidas especificamente na configuração possam ser diferentes, assim como o sistema operacional, as pegadinhas nesse nível provavelmente são as mesmas, então dê uma olhada rápida nesse post também se você tiver problemas com o agendamento em lote com o Agendador de Tarefas não funcionando como esperado.


Repartição básica de script

  • o FOR /F loop cria o YYYYMMDD variável a ser usada para a data atual.

  • o CheckDir é um caminho de unidade local ou até mesmo um caminho UNC de \\servername\sharename\folder que você vai colocar este pequeno arquivo de verificação com o YYYYMMDD parte de seu nome de arquivo a cada dia.

    • Apenas mude o C:\Path ou conecte o caminho UNC para onde isso precisa apontar em seu ambiente
  • o checkfile é apenas o nome do arquivo com o %CheckDir%\ na frente dele e do %DT% anexado ao final antes da extensão .txt. Por exemplo, vai dar-lhe um resultado final de C:\Path\VersionBackup_20130202.txt por hoje como no meu exemplo.

    • Isso essencialmente irá verificar se o arquivo existe para hoje, em caso afirmativo, finalizar o script, se ele não existir, criá-lo e, em seguida, execute o VersionBackup.exe de qualquer nome de EXE é chamado. Desta forma, esta coisa poderia ser agendada com o Agendador de Tarefas para uma vez por hora apontando para o script em lote e pela lógica do script em lote, ele só poderá ser executado uma vez por dia.
  • o START "" "C:\Path\VersionBackup.exe" só precisa apontar para o caminho completo onde existe o nome EXE que faz a operação de backup de 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

Pimp Juice IT
fonte
Obrigado, isso funciona! Eu notei no meu sistema que% DATE% avalia para 2016/02/02, então eu mudo o loop for para FOR /F "TOKENS=1-3 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%A%%B%%C"
Jim
0

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

Apenas para o usuário atual:

C: \ Usuários \ nome do usuário \ AppData \ Roaming \ Microsoft \ Windows \ Menu Iniciar \ Programas \ Inicialização

Para todos os usuários:

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

Espero que isto ajude!

Spencer4134
fonte