Skip to main content

Pianificare attività su Windows

In questa guida vedremo come creare, modificare ed eseguire operazioni automatica di qualsiasi genere usando lo strumento "Utilità di pianificazione". E' possibile utilizzare questo strumento per ogni genere di attività, dai task di manutenzione e pulizia fino a operazioni specifiche per i task di sviluppo.

Requisiti Minimi

Creazione attività

Vediamo come creare un'attività generica.

  • Aprire Start e cercare Utilità di pianificazione
  • Nella barra laterale saranno mostrate tutte le cartelle contenenti le attività

senza_cornice

  • Cliccare con il tasto destro su "Libreria Utilità di pianificazione" e poi su "Nuova Cartella".
  • Associare alla cartella un nome di vostra preferenza. Questo passaggio non è obbligatorio ma è fortemente consigliato per tenere separate le attività custom da quelle di sistema/app
  • Entrare nella nuova cartella e cliccare su "Crea Attività

senza_cornice

  • Compilare il primo tab con nome e descrizione
  • Selezionare le impostazioni più adeguate in "Opzioni di sicurezza".

senza_cornice

  • Andare nel secondo tab "Attivazione" e cliccare su nuovo

senza_cornice

  • Scegliere la pianificazione più adeguata all'attività da svolgere, quando e quante volte dovrà essere eseguita l'attività
  • Cliccare su OK e salvare.
  • Andare nel tab Azioni e cliccare su Nuova. In questa fase si definirà in cosa consiste l'attività, ad esempio un programma o uno script da eseguire.
  • E' possibile specificare ulteriori condizioni per determinare quando deve triggerarsi l'esecuzione dell'attività
  • Cliccare su OK e confermare.
  • Provare ad eseguire l'attività per verificare il corretto funzionamento.

Esempi

1. Esempio Aggiornamento file Hosts

In questo esempio si mostrerà come impostare un'attività per eseguire uno script PowerShell che si occupa di recuperare l'indirizzo ip della WSL2 e associarlo ad uno specifico hostname.

Creare Script attività

Vogliamo eseguire questo script ogni giorno, all'accesso:

param([string]$Hostname = "localcrowd.cavallo",[bool]$CheckHostnameOnly = $true)
#Requires -RunAsAdministrator
$DesiredIP = (wsl hostname -I | Out-String).replace("`n","").replace("`r","")
$hostsFilePath = "$($Env:WinDir)\system32\Drivers\etc\hosts"
$hostsFile = Get-Content $hostsFilePath
Write-Host "About to add $desiredIP for $Hostname to hosts file" -ForegroundColor Gray
$escapedHostname = [Regex]::Escape($Hostname)
$patternToMatch = If ($CheckHostnameOnly) `{ ".*\s+$escapedHostname.*" }` Else `{ ".*$DesiredIP\s+$escapedHostname.*" }`
If (($hostsFile) -match $patternToMatch) {
Write-Host "Host found, we'll update the hostname with new ip"
($hostsFile) -replace $patternToMatch, ("$DesiredIP".PadRight(20," ") + "$Hostname") | Out-File $hostsFilePath
Write-Host $desiredIP.PadRight(20," ") "$Hostname - replaced" -ForegroundColor DarkYellow
}
Else {
Write-Host $desiredIP.PadRight(20," ") "$Hostname - adding to hosts file... " -ForegroundColor Yellow -NoNewline
Add-Content -Encoding UTF8 $hostsFilePath ("$DesiredIP".PadRight(20, " ") + "$Hostname")
Write-Host " done"
}

Lo script accetta due parametri $Hostname e $CheckHostnameOnly, e popola la variabile $DesiredIP con il risultato del comando wsl hostname -I.

Creare attività in utilità di pianificazione

Per questa attività sarà necessario spuntare la casella "Esegui con Privilegi Elevati", necessario per poter aggiornare il file hosts.

senza_cornice

Impostare l'attivazione per un esecuzione giornaliera (o in base alle necessità). In alcuni casi può essere utile aggiungere un ritardo nell'esecuzione dell'attività (consigliato).

senza_cornice

Aggiungere un nuova attività che aprirà il programma powershell.exe con il path locale dello script. Nel caso d'esempio sono stati inseriti come argomenti: -NoExit -ExecutionPolicy Bypass D:\Scripts\powershell\updateHosts.ps1. In particolare -ExecutionPolicy Bypass per assicurarsi che lo script venga eseguito correttamente senza problemi di policy e -NoExit per lasciare il terminale aperto a fine esecuzione (può essere utile ai primi giri per controllare eventuali log.