Molti si affidano a software di terze parti per pianificare backup o script di manutenzione, ma Windows include da sempre uno strumento completo e gratuito: Utilità di pianificazione (Task Scheduler). Sa gestire trigger complessi, privilegi elevati, riesecuzione in caso di errore e persino il risveglio del PC per eseguire un'attività. Vediamo come usarlo sia da interfaccia grafica sia da riga di comando/PowerShell.
Aprire Task Scheduler
Il modo più veloce è da Esegui (Win+R):
taskschd.msc
In alternativa, da PowerShell puoi già interrogare le attività esistenti senza aprire alcuna finestra:
Get-ScheduledTask | Select-Object TaskName, State | Sort-Object TaskName
Creare un'attività da riga di comando con schtasks
Il comando storico schtasks.exe funziona ancora perfettamente ed è comodo per script rapidi. Esempio: eseguire un backup con robocopy ogni giorno alle 2 di notte:
schtasks /create /tn "BackupDocumenti" ^
/tr "robocopy C:\Utenti\Dati D:\Backup\Dati /MIR /R:2 /W:5" ^
/sc daily /st 02:00 /ru SYSTEM /rl highest
Spiegazione dei parametri principali:
- /tn — nome dell'attività
- /tr — comando da eseguire
- /sc daily /st 02:00 — pianificazione giornaliera alle 02:00
- /ru SYSTEM — esegui con l'account di sistema (non serve una password ed è sempre disponibile, anche senza utenti loggati)
- /rl highest — esegui con privilegi elevati
Per verificarla o eliminarla in seguito:
schtasks /query /tn "BackupDocumenti" /v /fo list
schtasks /delete /tn "BackupDocumenti" /f
Lo stesso risultato con i cmdlet PowerShell (più leggibile)
Il modulo ScheduledTasks, incluso di default, offre un approccio più strutturato e più facile da versionare in uno script. Esempio: eseguire uno script PowerShell di backup ogni giorno alle 2:00, anche se l'utente non è loggato:
$azione = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\Backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 2:00AM
$impostazioni = New-ScheduledTaskSettingsSet `
-StartWhenAvailable -WakeToRun -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 5)
Register-ScheduledTask -TaskName "BackupGiornaliero" `
-Action $azione -Trigger $trigger -Settings $impostazioni `
-User "SYSTEM" -RunLevel Highest
-StartWhenAvailable recupera automaticamente l'esecuzione se il PC era spento all'orario previsto, mentre -WakeToRun risveglia il computer dalla sospensione (funziona solo se l'hardware supporta il wake timer).
Trigger alternativi utili
Oltre all'orario fisso, puoi agganciare l'attività ad altri eventi:
# All'accensione del sistema
$trigger = New-ScheduledTaskTrigger -AtStartup
# Al login di un utente qualsiasi
$trigger = New-ScheduledTaskTrigger -AtLogOn
# Ogni 30 minuti, ripetuto per una giornata intera
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) `
-RepetitionInterval (New-TimeSpan -Minutes 30) `
-RepetitionDuration (New-TimeSpan -Days 1)
Controllare la cronologia ed eseguire manualmente
Per lanciare subito un'attività senza aspettare il trigger, ottimo per testare uno script prima di fidarsene:
Start-ScheduledTask -TaskName "BackupGiornaliero"
Get-ScheduledTaskInfo -TaskName "BackupGiornaliero"
Get-ScheduledTaskInfo mostra l'ultimo orario di esecuzione, il prossimo previsto e il codice di uscita dell'ultima run (0 = successo). Se preferisci l'interfaccia grafica, in Task Scheduler seleziona l'attività e, nel pannello centrale, abilita la scheda Cronologia dal menu Azione > Abilita registro cronologia di tutte le attività: per impostazione predefinita è disattivata per risparmiare risorse.
Esportare e importare attività (utile per replicarle su più PC)
# Esporta in XML
schtasks /query /tn "BackupGiornaliero" /xml > BackupGiornaliero.xml
# Importa su un'altra macchina
schtasks /create /tn "BackupGiornaliero" /xml BackupGiornaliero.xml /ru SYSTEM
Consigli pratici
- Usa sempre -ExecutionPolicy Bypass solo per l'invocazione puntuale dello script, non modificare la policy globale del sistema con Set-ExecutionPolicy Unrestricted.
- Fai loggare lo script (redirect su file di log) così puoi diagnosticare i fallimenti anche a giorni di distanza.
- Per i backup, preferisci robocopy a un semplice copy: gestisce meglio riprese su errore, permessi e file in uso.
- Esegui sempre un test manuale con Start-ScheduledTask prima di fidarti del trigger automatico.
Con questi strumenti, nessun backup o script di manutenzione deve più dipendere dalla tua memoria o da un tool esterno: Windows lo fa già, in modo affidabile, da riga di comando o da interfaccia grafica.