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.