Come automatizzare gli script PowerShell con Task Scheduler

Microsoft Windows Task Scheduler può aiutarvi a lanciare automaticamente un programma o uno script PowerShell in un certo momento o quando si verificano determinate condizioni. È anche possibile programmare l’invio di e-mail e persino la visualizzazione di determinati messaggi. In questo blog, vi mostreremo come eseguire uno script PowerShell da Task Scheduler che avviserà su qualsiasi installazione di software su un computer locale.

Creeremo anche attività pianificate utilizzando gli script PowerShell. Imparerai come:

  • Creare attività con Task Scheduler
  • Modificare o eliminare attività pianificate
  • Creare attività pianificate con script PowerShell.

Creare attività con Task Scheduler

Apri Task Scheduler premendo “Windows+R” e digitando “taskschd.msc” nella finestra che si apre. Poi fai i seguenti passi:

1. Clicca su “Crea un’attività” e inserisci un nome e una descrizione per la nuova attività. Per eseguire il programma con i privilegi di amministratore, spunta la casella “Esegui con i privilegi più alti”. Nel nostro esempio, assegneremo un account di servizio per eseguire il compito e lo eseguiremo indipendentemente dal fatto che l’utente sia connesso.

2. Passa alla scheda Triggers e clicca sul pulsante “New…”. Qui puoi specificare le condizioni che innescano l’esecuzione del compito. Per esempio, si può avere l’esecuzione su programma, all’accesso, inattivo, all’avvio o ogni volta che si verifica un evento particolare. Vogliamo che il nostro compito sia attivato da ogni nuova installazione di software, quindi scegliamo “Su un evento” dal menu a discesa e selezioniamo “Applicazione” dalle impostazioni del registro. Lascia il parametro “Source” vuoto e imposta l’EventID a “11707”. Fai clic su “OK” per salvare le modifiche.

3. Vai alla scheda “Actions” e clicca su “New…”. Qui puoi specificare le azioni che saranno eseguite ogni volta che le condizioni di trigger sono soddisfatte. Per esempio, è possibile inviare un’e-mail o visualizzare un messaggio. Nel nostro caso, vogliamo avviare un programma, quindi dobbiamo creare lo script PowerShell che vogliamo eseguire e salvarlo con l’estensione “ps1”. Puoi trovare lo script qui; invierà un avviso con i dettagli dell’evento sul software installato.

Per programmare lo script PowerShell, specifica i seguenti parametri:

  • Azione: Avvia un programma
  • Program\script: powershell
  • Aggiungi argomenti (opzionale): -File

Clicca “OK” per salvare le modifiche.

4. La scheda “Condizioni” ti permette di specificare le condizioni che, insieme al trigger, determinano se il compito deve essere eseguito. Nel nostro caso, dovremmo lasciare le impostazioni predefinite su questa scheda.

5. Puoi anche impostare parametri aggiuntivi per il tuo compito programmato nella scheda “Impostazioni”. Per il nostro esempio, però, li lasceremo invariati.

6. Quando il compito è completamente impostato, il sistema ti chiederà la password dell’account di servizio. Nota che questo account deve avere il diritto di “Log on as Batch Job”. Inserisci la password e fai clic su “OK” per salvare l’attività.
7. Affinché Task Scheduler funzioni correttamente, il servizio Job Scheduler deve essere impostato per avviare Esegui “Services.msc”. Nell’elenco dei servizi, trova Task Scheduler e fai doppio clic su di esso. Nella scheda Generale, imposta il tipo di avvio su “Automatico” e fai clic su OK per salvare la modifica.

Ora, ogni volta che un nuovo software viene installato sul tuo Microsoft Windows Server, verrai avvisato tramite un’e-mail che specifica l’ora dell’installazione, il nome del software e l’ID utente (SID) della persona che lo ha installato.

Modificare o eliminare le attività pianificate

Per modificare un’attività esistente, fai clic con il tasto destro del mouse sull’elenco, seleziona Proprietà, modifica le impostazioni richieste e fai clic su OK. Per eliminare un’attività pianificata, fai clic con il tasto destro del mouse, seleziona Elimina e conferma l’azione.

Creazione di attività pianificate con script PowerShell

Ora che sai come creare un’attività utilizzando Task Scheduler, scopriamo come creare un’attività pianificata utilizzando PowerShell. Supponiamo che vogliamo che il nostro compito venga lanciato ogni giorno alle 10 del mattino, e che debba eseguire lo script PowerShell che potete trovare qui, che monitorerà le modifiche all’appartenenza al gruppo nel sito Active Directory.

In Windows Powershell 2.0 (Windows 7, Windows Server 2008 R2), per creare un lavoro pianificato, dovete usare il modulo TaskScheduler. Installa il modulo eseguendo il comando “Import-Module TaskScheduler” e usa il seguente script per creare un’attività che eseguirà lo script PowerShell chiamato GroupMembershipChanges.ps1 ogni giorno alle 10 AM:

Import-Module TaskScheduler $task = New-Task$task.Settings.Hidden = $trueAdd-TaskAction -Task $task -Path C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe –Arguments "-File C:\Scripts\GroupMembershipChanges.ps1"Add-TaskTrigger -Task $task -Daily -At "10:00"Register-ScheduledJob –Name "Monitor Group Management" -Task $task

Windows PowerShell 4.0 (Windows Server 2012 R2 e superiore) non include il modulo Task Scheduler, quindi questo script non funziona. Invece, PowerShell 3.0 e 4.0 hanno introdotto nuove cmdlets per la creazione di task pianificati, New-ScheduledTaskTrigger e Register-ScheduledTask, che rendono la creazione di un task pianificato molto più semplice e conveniente. Creiamo quindi un’attività che eseguirà il nostro script ogni giorno alle 10 del mattino utilizzando l’account di sistema (SYSTEM). Questo compito sarà eseguito da un account con privilegi elevati.

$Trigger= New-ScheduledTaskTrigger -At 10:00am –Daily # Specify the trigger settings$User= "NT AUTHORITY\SYSTEM" # Specify the account to run the script$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript.ps1" # Specify what program to run and with its parametersRegister-ScheduledTask -TaskName "MonitorGroupMembership" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force # Specify the name of the task

Altre opzioni di attivazione che potrebbero essere utili nella creazione di nuovi compiti includono:

  • -AtStartup – Avvia il tuo compito all’avvio di Windows.
  • -AtLogon – Avvia il tuo compito quando l’utente si registra.
  • -Once – Avvia il tuo compito una volta. Puoi impostare un intervallo di ripetizione usando il parametro -RepetitionInterval.
  • -Weekly – Avvia il tuo compito una volta alla settimana.

Nota che, usando queste cmdlets, non è possibile attivare l’esecuzione “su un evento” come abbiamo fatto con lo strumento Task Scheduler. Gli script PowerShell con trigger “su un evento” sono molto più complicati, quindi questo è un vero svantaggio nell’usare PowerShell piuttosto che Task Scheduler.

Conclusione

Come potete vedere, è facile creare compiti programmati usando Task Scheduler o PowerShell. Ma ricordate che modifiche improprie ai vostri compiti programmati possono causare interruzioni del servizio e degradare le prestazioni del server. Pertanto, è essenziale tenere traccia di tutte le modifiche alle attività pianificate.

Jeff è un direttore di Global Solutions Engineering presso Netwrix. È un blogger, oratore e presentatore Netwrix di lunga data. Nel blog di Netwrix, Jeff condivide lifehack, suggerimenti e trucchi che possono migliorare notevolmente la tua esperienza di amministrazione del sistema.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.