Como agendar tarefas no Windows sem GUI — schtasks na prática

Quantos de vocês já abriram o Agendador de Tarefas gráfico do Windows, clicaram em "Criar Tarefa…" e ficaram perdidos nas abas de Gatilhos, Ações e Condições? O schtasks.exe resolve isso no terminal, sem GUI, em uma linha de comando — e está instalado em qualquer Windows desde o XP.
Se você já conhece o crontab do Linux, a lógica é similar: define quando rodar e o quê rodar. A principal diferença é a sintaxe — e o fato de que o schtasks pode rodar tarefas com qualquer usuário, incluindo o SYSTEM, sem precisar de senha visível no script.
Consultando tarefas agendadas: /Query
Antes de criar qualquer coisa, vale ver o que já está agendado na máquina:
schtasks /Query /FO TABLE /NHPara ver detalhes de uma tarefa específica:
schtasks /Query /TN "NomeDaTarefa" /FO LIST /VO parâmetro /FO define o formato de saída (TABLE, LIST ou CSV). Com /V você vê todos os campos: status, último código de resultado, próxima execução, usuário que roda, histórico de execuções. Útil para diagnosticar por que uma tarefa falhou silenciosamente.
Criando sua primeira tarefa: /Create
A estrutura básica:
schtasks /Create /TN "BackupDiario" /TR "C:\Scripts\backup.bat" /SC DAILY /ST 03:00 /RU SYSTEMParâmetros essenciais:
- /TN — Task Name: nome que aparece no Agendador de Tarefas
- /TR — Task Run: o executável ou comando a rodar
- /SC — Schedule: frequência de execução (ver abaixo)
- /ST — Start Time: horário no formato HH:MM
- /RU — Run User: com qual conta roda (
SYSTEM,NETWORK SERVICEou usuário específico) - /F — Force: sobrescreve a tarefa se já existir, sem pedir confirmação
Quais frequências o /SC aceita?
O parâmetro /SC define o ritmo da tarefa. Os valores mais usados:
MINUTE/HOURLY— a cada N minutos ou horas (combinar com/MO Npara o intervalo)DAILY— uma vez por dia no horário definido por/STWEEKLY— uma vez por semana; use/D MON,WED,FRIpara dias específicosMONTHLY— uma vez por mês; use/D 1,15para dias do mêsONSTART— ao iniciar o Windows, antes do login de qualquer usuárioONLOGON— quando qualquer usuário faz loginONCE— uma única vez na data+hora especificada com/SD DD/MM/AAAA
Executando scripts PowerShell com schtasks
O caso de uso mais comum para sysadmins é agendar um .ps1 sem abrir nenhuma janela. O ponto é passar o PowerShell como executável e o script como argumento:
schtasks /Create /TN "BackupDiario" ^
/TR "powershell.exe -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Scripts\backup.ps1" ^
/SC DAILY /ST 03:00 ^
/RU SYSTEM ^
/FO -NonInteractive garante que o script não pause esperando input do usuário. -WindowStyle Hidden suprime a janela preta do console — sem esse flag, uma janela aparece em segundo plano toda vez que a tarefa roda. -ExecutionPolicy Bypass evita que a política de execução bloqueie o script; se sua política já está configurada permissivamente, pode omitir.
Como executar um script PowerShell pelo Agendador de Tarefas sem abrir janela?
Use powershell.exe -WindowStyle Hidden -NonInteractive -File caminho\script.ps1 no parâmetro /TR, com /RU SYSTEM. Esses dois flags juntos garantem execução silenciosa: nenhuma janela aparece e o script não trava esperando confirmação do usuário. Rodar como SYSTEM elimina a necessidade de armazenar credenciais de usuário na tarefa.
Gerenciando tarefas existentes: /Change, /Delete e /Run
Alterar horário ou executável de uma tarefa:
schtasks /Change /TN "BackupDiario" /ST 04:00Atenção: o /Change não altera o tipo de agendamento (/SC). Se precisar mudar de DAILY para WEEKLY, a forma correta é apagar e recriar.
Excluir uma tarefa:
schtasks /Delete /TN "BackupDiario" /FForçar execução imediata sem esperar o próximo horário agendado:
schtasks /Run /TN "BackupDiario"Esse último é especialmente útil logo após criar uma tarefa: você testa agora se está funcionando, sem precisar esperar as 03:00 do dia seguinte para descobrir que faltou uma barra no caminho do script.
Alternativa moderna: módulo ScheduledTasks no PowerShell
Para automações mais complexas — múltiplos gatilhos, condições de bateria ou conectividade de rede, gerenciamento em máquinas remotas — o PowerShell tem o módulo ScheduledTasks nativo desde o Windows 8. A lógica é modular: cria cada peça separada e registra no final:
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NonInteractive -WindowStyle Hidden -File C:\Scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3:00AM
$settings = New-ScheduledTaskSettingsSet `
-ExecutionTimeLimit (New-TimeSpan -Hours 1) `
-StartWhenAvailable
Register-ScheduledTask -TaskName "BackupDiario" `
-Action $action -Trigger $trigger -Settings $settings `
-RunLevel Highest -ForceO -RunLevel Highest equivale a "Executar com privilégios mais altos" na GUI. O -StartWhenAvailable faz a tarefa rodar assim que possível se o horário agendado passou com o PC desligado — comportamento que o schtasks clássico não expõe facilmente. Se precisar entender melhor o ambiente PowerShell antes de montar esses pipelines, nosso guia de PowerShell para iniciantes cobre os conceitos básicos de forma direta.
Onde isso encaixa no seu arsenal Windows
O schtasks combina bem com outras ferramentas nativas que já cobrimos: o winget para instalar e atualizar programas pelo terminal, por exemplo, roda direto via linha de comando — agendar um winget upgrade --all toda semana é uma linha de schtasks. Da mesma forma, o OpenSSH nativo no Windows 11 pode ser combinado com tarefas agendadas: gerar chaves, fazer backup de configurações, enviar logs via SCP — tudo sem intervenção manual.
O resultado é uma estação ou servidor Windows que se administra sozinho nos horários certos, sem depender de nenhuma ferramenta de terceiros. Se você quiser comparar com o equivalente em Linux, temos o funcionamento detalhado do crontab no Linux — entender os dois facilita bastante quando o ambiente é misto.




Comentários