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

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 /NH

Para ver detalhes de uma tarefa específica:

schtasks /Query /TN "NomeDaTarefa" /FO LIST /V

O 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 SYSTEM

Parâ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 SERVICE ou 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 N para o intervalo)
  • DAILY — uma vez por dia no horário definido por /ST
  • WEEKLY — uma vez por semana; use /D MON,WED,FRI para dias específicos
  • MONTHLY — uma vez por mês; use /D 1,15 para dias do mês
  • ONSTART — ao iniciar o Windows, antes do login de qualquer usuário
  • ONLOGON — quando qualquer usuário faz login
  • ONCE — 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 ^
  /F

O -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:00

Atençã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" /F

Forç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 -Force

O -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