Gestione del Task Scheduler con schtasks.exe

Panoramica

In questo articolo viene illustrato come gestire il Task Scheduler di Windows utilizzando lo strumento da riga di comando schtasks.exe, installato di default su Windows Server e sui sistemi client Windows.

Tutti gli esempi presuppongono l’esecuzione da PowerShell, utilizzando in modo coerente l’accento grave (`) come carattere di continuazione di riga.


Convenzioni per le variabili

Nome variabile Esempio Descrizione
<<SERVER_NAME>> WSRV2025 Nome del server di destinazione
<<ADMIN_USER>> Administrator Account che esegue l’attività
<<TASK_NAME>> DailyTempCleanup Nome dell’attività
<<SCRIPT_PATH>> C:\Maintenance\cleanup_temp.ps1 Script da eseguire
<<LOG_PATH>> C:\Maintenance\Logs Cartella dei log
<<BACKUP_PATH>> C:\Maintenance\Backups Percorso per il backup dei log eventi

Caratteri di continuazione in PowerShell e CMD

I comandi mostrati in questo articolo sono pensati per essere eseguiti in PowerShell.

  • PowerShell: accento grave (`)
  • CMD: caret (^)

Esempio (per PowerShell):

schtasks.exe /Create `
  /TN "Example" `
  /SC DAILY `
  /ST 02:00 `
  /TR "powershell.exe -File example.ps1"

Step 1: Panoramica dei sottocomandi di schtasks.exe

Sottocomando Utilizzo
/Create Creazione di una nuova attività
/Delete Eliminazione di un’attività
/Query Elenco attività, dettagli ed esportazione XML
/Change Modifica della configurazione di un’attività
/Run Esecuzione immediata di un’attività
/End Arresto di un’attività in esecuzione
/ShowSid Visualizzazione del SID dell’account di esecuzione

Step 2: /Create – sintassi di base e opzioni principali

Step 2.1 Sintassi generale

schtasks.exe /Create `
  /TN "<<TASK_NAME>>" `
  /TR "<<COMANDO_DA_ESEGUIRE>>" `
  /SC PIANIFICAZIONE `
  [altre_opzioni...]

Step 2.2 Opzioni più usate

Opzione Contenuto
/SC Tipo di pianificazione (DAILY / WEEKLY / MONTHLY / ONLOGON / ONEVENT)
/MO Modificatore
/ST HH:mm Ora di inizio
/D Giorno di esecuzione (1–31 oppure MON/TUE…)
/RU Account che esegue l’attività
/RP Password (* per immissione interattiva)
/RL HIGHEST Esecuzione con privilegi elevati
/F Sovrascrittura forzata di un’attività esistente

Su /MO (modificatore)
Parametro che definisce in modo più preciso la frequenza o la posizione dell’esecuzione.

Esempi:

  • “Ogni 3 ore” → /SC HOURLY /MO 3
  • “Ogni 2 settimane” → /SC WEEKLY /MO 2
  • “Secondo mercoledì del mese” → /SC MONTHLY /MO SECOND /D WED
  • “Trigger su evento” → /SC ONEVENT /MO [XPath]

Step 2.3 Elenco dei valori possibili per /SC

/SC Descrizione
DAILY Quotidiano
WEEKLY Settimanale
MONTHLY Mensile
ONCE Una sola esecuzione
ONSTART All’avvio del sistema
ONLOGON All’accesso dell’utente
ONIDLE Quando il sistema è inattivo
ONEVENT Al verificarsi di un evento di log

Step 2.4 Attività giornaliera

schtasks.exe /Create `
  /TN "DailyTempCleanup" `
  /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Maintenance\cleanup_temp.ps1 -DaysToKeep 7 -LogPath <<LOG_PATH>>" `
  /SC DAILY `
  /ST 02:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.5 Esecuzione all’accesso (ONLOGON)

schtasks.exe /Create `
  /TN "OnLogonAudit" `
  /SC ONLOGON `
  /TR "powershell.exe -File C:\Scripts\logon_audit.ps1" `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.6 Esecuzione all’avvio (ONSTART)

schtasks.exe /Create `
  /TN "OnStartInit" `
  /SC ONSTART `
  /TR "powershell.exe -File C:\Scripts\startup_init.ps1" `
  /RU "SYSTEM" `
  /RL HIGHEST `
  /F

Step 2.7 Trigger basato su log eventi (ONEVENT)

schtasks.exe /Create `
  /TN "Event101Handler" `
  /SC ONEVENT `
  /EC System `
  /MO "*[System/EventID=101]" `
  /TR "powershell.exe -File C:\Scripts\event_handler.ps1" `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.8 Esecuzione ogni 3 ore

schtasks.exe /Create `
  /TN "Every3Hours" `
  /TR "powershell.exe -File script.ps1" `
  /SC HOURLY `
  /MO 3 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.9 Secondo mercoledì del mese

schtasks.exe /Create `
  /TN "SecondWednesdayTask" `
  /TR "powershell.exe -File task.ps1" `
  /SC MONTHLY `
  /MO SECOND `
  /D WED `
  /ST 03:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.10 Ultimo giorno del mese (LASTDAY)

schtasks.exe /Create `
  /TN "LastDayMonthly" `
  /TR "powershell.exe -File script.ps1" `
  /SC MONTHLY `
  /MO LASTDAY `
  /M * `
  /ST 01:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.11 Ogni 2 settimane

schtasks.exe /Create `
  /TN "Every2Weeks" `
  /TR "powershell.exe -File script.ps1" `
  /SC WEEKLY `
  /MO 2 `
  /D MON `
  /ST 05:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 3: /Query – elenco e dettagli

Opzione Descrizione
/FO TABLE Output in formato tabella
/FO LIST Output come elenco di campi
/V Include informazioni dettagliate (trigger, azioni, ecc.)
/TN "<<TASK_NAME>>" Mostra solo l’attività specificata
schtasks.exe /Query /FO TABLE
schtasks.exe /Query /FO LIST /V
schtasks.exe /Query /TN "<<TASK_NAME>>" /FO LIST /V

Step 4: /Change – modifica di un’attività

Opzione Descrizione
/TN Nome dell’attività
/RU Modifica dell’account di esecuzione
/RP * Immissione interattiva della nuova password
/TR Sostituzione del comando di esecuzione
/ENABLE /DISABLE Abilitazione / disabilitazione dell’attività

Nota: con /Change non è possibile modificare i parametri del trigger (/SC, /MO, /D, /M).
Se è necessario cambiare la pianificazione, è più sicuro usare /Delete per eliminare l’attività e poi /Create per ricrearla.

Modifica dell’account di esecuzione

schtasks.exe /Change `
  /TN "<<TASK_NAME>>" `
  /RU "<<ADMIN_USER>>" `
  /RP *

Modifica del comando di esecuzione

schtasks.exe /Change `
  /TN "<<TASK_NAME>>" `
  /TR "powershell.exe -File <<SCRIPT_PATH>> -LogPath <<LOG_PATH>>"

Abilitare / disabilitare un’attività

schtasks.exe /Change /TN "<<TASK_NAME>>" /ENABLE
schtasks.exe /Change /TN "<<TASK_NAME>>" /DISABLE

Step 5: /Run (esecuzione immediata) e /End (arresto)

Opzione Descrizione
/Run Esegue immediatamente l’attività
/I Ignora i vincoli di pianificazione (data di inizio/fine, ecc.)
/End Arresta l’attività in esecuzione
/TN Nome dell’attività di destinazione
schtasks.exe /Run /TN "<<TASK_NAME>>"
schtasks.exe /Run /TN "<<TASK_NAME>>" /I

schtasks.exe /End /TN "<<TASK_NAME>>"

Step 6: Importare un’attività da XML

Import XML

Opzione Descrizione
/XML file Crea un’attività a partire da una definizione XML
/RU Sovrascrive l’account di esecuzione
/RP * Immissione interattiva della password
schtasks.exe /Create `
  /TN "<<TASK_NAME>>" `
  /XML "C:\TaskTemplates\<<TASK_NAME>>.xml" `
  /RU "<<ADMIN_USER>>" `
  /RP *

Esportazione XML (tramite Query)

Opzione Descrizione
/XML ONE Esporta la definizione dell’attività in un singolo XML
> file Reindirizza l’output verso un file
schtasks.exe /Query `
  /TN "<<TASK_NAME>>" `
  /XML ONE `
  > C:\TaskTemplates\<<TASK_NAME>>.xml

Step 8: /Delete – eliminazione di un’attività

Opzione Descrizione
/Delete Modalità di eliminazione
/TN Nome dell’attività
/F Eliminazione forzata senza richiesta di conferma
schtasks.exe /Delete /TN "<<TASK_NAME>>" /F

Step 9: /ShowSid – visualizzare il SID dell’account

Opzione Descrizione
/ShowSid Mostra il SID associato all’account di esecuzione dell’attività
/TN Nome dell’attività
schtasks.exe /ShowSid /TN "<<TASK_NAME>>"

Step 10: Gestione delle attività su server remoti

Opzione Descrizione
/S "<<SERVER_NAME>>" Server remoto di destinazione
/U Account per la connessione remota
/P * Password per l’account remoto (* per immissione interattiva)
Altre Parametri identici al caso locale
schtasks.exe /Create `
  /S "<<SERVER_NAME>>" `
  /U "<<ADMIN_USER>>" `
  /P * `
  /TN "<<TASK_NAME>>" `
  /TR "powershell.exe -File <<SCRIPT_PATH>>" `
  /SC DAILY `
  /ST 02:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Conclusione

L’uso di schtasks.exe permette di integrare facilmente il Task Scheduler negli scenari di provisioning e automazione operativa dei server.

  • La combinazione di /SC e /MO consente di esprimere pianificazioni molto flessibili (giornaliere, settimanali, mensili, “ennesimo giorno della settimana”, ultimo giorno del mese).
  • I trigger ONLOGON, ONSTART e ONEVENT permettono un’automazione guidata da eventi (accesso, avvio, eventi di log).
  • Tramite /Query /XML e /Create /XML è possibile esportare e reimportare le definizioni delle attività come modelli XML riutilizzabili.
  • I comandi /Change, /Run, /End, /Delete e /ShowSid coprono le esigenze principali di gestione nel ciclo di vita delle attività.
  • Con /S /U /P, le stesse definizioni possono essere distribuite rapidamente su più server remoti, supportando scenari di automazione su larga scala.