Adam the Automator

Hai bisogno di creare molte attività pianificate o automatizzare la creazione di attività pianificate? Se è così, sei fortunato. In questo articolo, si sta andando a imparare come gestire le attività pianificate utilizzando PowerShell.

Le attività pianificate che eseguono azioni semplici sono veloci da eseguire e abbastanza comode da ripetere utilizzando l’interfaccia app (GUI) dell’utilità di pianificazione. Tuttavia, gli amministratori di sistema o gli sviluppatori potrebbero dover distribuire attività più complicate con più pianificazioni, trigger o argomenti.

Fortunatamente, è possibile utilizzare PowerShell per creare e gestire le attività pianificate. La gestione delle attività pianificate con PowerShell è resa possibile con l’uso del modulo ScheduledTasks integrato in Windows.

Sommario

Prerequisiti

Poiché questo è un tipo di articolo learning-by-doing, ci sono alcuni prerequisiti in modo da poter seguire. Di seguito sono riportati i requisiti per creare attività pianificate PowerShell utilizzando PowerShell.

  • Gli esempi in questo articolo utilizzano Windows 10. Ma Windows Server 2012 e più recenti possono fare lo stesso.
  • Windows PowerShell 5.1 o PowerShell 7.
  • Sarebbe utile se avessi un editor di script come Visual Studio Code, Notepad++ o Windows PowerShell ISE.

Creazione di una nuova attività pianificata

Un’attività pianificata richiede un minimo di due componenti per funzionare; azione e trigger. L’aggiunta di un contesto di sicurezza e di una serie di impostazioni correlate è facoltativa. Per una migliore comprensione, fare riferimento alla breve spiegazione per ogni componente dell’attività pianificata di seguito:

  • Azione-l’azione che viene eseguita dall’attività pianificata. Un’azione consiste in genere nell’eseguire un programma o uno script. Un’attività pianificata può avere più azioni.
  • Trigger-controlla quando viene eseguita l’attività pianificata. I trigger possono essere basati sul tempo, come l’impostazione di una pianificazione per la ricorrenza giornaliera o oraria. I trigger possono anche essere basati sull’attività, che esegue un’attività in base alle attività rilevate come l’avvio del computer, l’accesso di un utente o gli eventi registrati.
  • Principal-controlla il contesto di sicurezza utilizzato per eseguire l’attività pianificata. Tra le altre cose, un principal include l’account utente e il privilegio richiesto utilizzato dall’attività pianificata.
  • Impostazioni-è un insieme di opzioni e condizioni che controlla come il comportamento delle attività pianificate. Ad esempio, è possibile personalizzare un’attività in modo che venga rimossa dopo un numero consecutivo di giorni in cui l’attività non è stata utilizzata.

Durante la creazione di un’attività pianificata, il principale e le impostazioni non sono esplicitamente richiesti. I valori predefiniti vengono utilizzati invece.

Creazione di un’azione task

Quando si desidera che un’attività pianificata esegua qualcosa, creare una nuova azione task. In questo esempio, verrà creata un’attività che chiamerà PowerShell.exe ed eseguire uno script. Assicurati di avere il tuo editor di script pronto.

Si noti che lo script sottostante è solo un esempio casuale e non è necessario utilizzarlo. È possibile utilizzare qualsiasi script che si desidera. Tuttavia, l’utilizzo dello script riportato di seguito crea un risultato facilmente verificabile che può confermare se l’attività pianificata ha funzionato.

Lo script di esempio qui sotto, quando eseguito, ottiene i primi dieci eventi più recenti dal registro eventi dell’applicazione. Quindi, esportare gli eventi in un nuovo file XML nel c:\temp cartella. Copia il codice qui sotto, incollalo nel tuo editor di script e salva con il nome del file Get-LatestAppLog.ps1 in qualsiasi cartella che desideri.

Il codice seguente utilizza il New-ScheduledTaskAction per creare un nuovo oggetto azione attività pianificata memorizzato nella variabile $taskAction. Questa azione chiamerà l’eseguibilepowershell.exe e passerà l’argomento per eseguire C:\scripts\Get-LatestAppLog.ps1.

Copia il comando sopra ed eseguilo in PowerShell. L’oggetto risultante nella variabile$taskAction dovrebbe apparire come lo screenshot qui sotto.

Creazione di una nuova Operazione Pianificata Azione

l’Aggiunta di un Trigger

Ora che avete un compito azione creato, il passo successivo è quello di definire il momento in cui l’attività deve eseguire. Il cmdlet da utilizzare per creare un trigger è il cmdletNew-ScheduledTaskTrigger. Il comando seguente crea un trigger da eseguire ogni giorno alle 15: 00. Copia ed esegui il codice in PowerShell.

# Create a new trigger (Daily at 3 AM)$taskTrigger = New-ScheduledTaskTrigger -Daily -At 3PM$tasktrigger

L’oggetto risultante nella variabile$tasktrigger dovrebbe avere lo stesso aspetto dell’immagine qui sotto.

Creazione di un Trigger (ogni giorno alle 3 AM)

Registrazione dell’Attività

finora, abbiamo creato i requisiti di base per creare una nuova operazione pianificata. Il prossimo passo è creare l’attività pianificata e registrarla nel sistema.

Il codice seguente utilizza il cmdlet Register-ScheduledTask per registrare l’attività pianificata. Il parametro-Action è necessario per passare l’oggetto azione attività memorizzato nella variabile denominata$taskAction. Il parametro-Trigger è necessario per passare il contenuto della variabile$taskTrigger.

# Register the new PowerShell scheduled task# The name of your scheduled task.$taskName = "ExportAppLog"# Describe the scheduled task.$description = "Export the 10 newest events in the application log"# Register the scheduled taskRegister-ScheduledTask ` -TaskName $taskName ` -Action $taskAction ` -Trigger $taskTrigger ` -Description $description

Copia il codice sopra ed eseguilo in PowerShell. Di conseguenza, la nuova attività pianificata viene registrata, come mostrato di seguito.

Registrazione della nuova attività pianificata

Esecuzione dell’attività

Dopo aver creato un’attività pianificata, è necessario confermare che l’attività ora esiste nel sistema. Aprire l’utilità di pianificazione e trovare l’attività pianificata dall’elenco. Dovresti vedere l’attività registrata nell’elenco.

La nuova attività pianificata come si vede nell’app Utilità di pianificazione

È anche possibile confermare l’esistenza dell’attività pianificata registrata eseguendo il comando PowerShell riportato di seguito.

Get-ScheduledTaskInfo -TaskName ExportAppLog

Dovresti quindi vedere un output simile, come lo screenshot del risultato qui sotto.

Ottenere le informazioni sull’attività pianificata.

E infine, la nuova attività pianificata dovrebbe funzionare per determinare se ciò che hai fatto finora ha avuto successo. Per testare l’attività pianificata, è possibile attendere la prossima pianificazione di esecuzione o utilizzare il comando seguente per attivare manualmente.

Start-ScheduledTask -TaskName ExportAppLog

Dopo aver eseguito il codice, dovresti vedere un risultato simile a quello mostrato di seguito. Come puoi vedere, l’esecuzione del codice ha creato un file XML, che indica che l’attività pianificata ha funzionato come previsto.

Esecuzione di un’Operazione Pianificata

l’Aggiornamento di un’Attività Pianificata Esistente

Dopo la creazione di un’attività pianificata, alcuni aspetti di esso, potrebbe essere necessario aggiornare a un certo punto. Forse vuoi farlo funzionare un’ora prima o cambiare la posizione del file di script. Queste sono alcune delle modifiche all’attività pianificata che potrebbero essere necessarie.

Nelle sezioni successive, imparerai come apportare modifiche alle attività pianificate registrate esistenti utilizzando PowerShell.

Modifica dell’account utente, delle opzioni di sicurezza e delle impostazioni di compatibilità

Nella sezione precedente, l’attività pianificata viene eseguita nello stesso contesto dell’account utente che l’ha creata. Cosa succede se l’attività deve essere eseguita utilizzando un altro account utente, ad esempio un account di servizio.

In questo esempio, si modificheranno le opzioni di sicurezza dell’attività pianificata alle impostazioni riportate di seguito.

  • È necessario modificare l’account utente per eseguire l’attività pianificata.
  • Consente l’esecuzione dell’attività indipendentemente dal fatto che l’utente abbia effettuato l’accesso o meno.
  • Eseguire il con i più alti livelli di privilegi.
  • Imposta la compatibilità dell’attività su Windows 10.

La prima riga del codice sottostante creerà un oggetto principale con il nuovo account utente e imposterà l’attività per l’esecuzione con i privilegi più alti. Assicurarsi di modificare il valore del parametro -UserID come richiesto. La seconda riga configura la compatibilità dell’attività con Windows 10.

Infine, la terza riga aggiorna l’attività pianificataExportAppLog **utilizzando i valori memorizzati nelle variabilithe $taskPrincipal e$taskSettings. Copia il codice qui sotto ed eseguilo in PowerShell.

# Set the task principal's user ID and run level.$taskPrincipal = New-ScheduledTaskPrincipal -UserId 'DEVPC\svcTask' -RunLevel Highest# Set the task compatibility value to Windows 10.$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8# Update the task principal settingsSet-ScheduledTask -TaskName 'ExportAppLog' -Principal $taskPrincipal -Settings $taskSettings

Noterai che il valore del parametro-CompatibilityWin8. Non confonderti. Sembra che Microsoft non abbia aggiornato la selezione della versione “più recente” da Windows 8. Tuttavia, specificando il Win8 valore si tradurrà in Windows 10 compatibilità.

Successivamente, il comando seguente utilizza il cmdlet Set-ScheduledTaskper aggiornare l’attività pianificata ExportAppLog **esistente. Assicurarsi di modificare il valore della password nel parametro -Password per utilizzare la password corretta dell’account utente.

# Update the task user account and passwordSet-ScheduledTask -TaskName 'ExportAppLog' -User $taskPrincipal.UserID -Password 'PASSWORD'

Dopo aver eseguito il comando precedente, l’attività pianificata viene aggiornata. Se si seleziona l’attività pianificata, è possibile confermare che le opzioni di protezione sono state modificate.

L’opzione di sicurezza, account utente e le impostazioni di compatibilità

evoluzione del Trigger

a Volte il grilletto pianificazione deve essere cambiato. Forse a causa di alcuni aggiustamenti operativi o ottimizzazione delle risorse. In ogni caso, è anche possibile utilizzare PowerShell per sostituire o aggiungere trigger a un’attività pianificata.

Attualmente, l’attività pianificata ExportAppLog viene attivato ogni giorno alle 15: 00. Supponiamo che sia necessario modificare la pianificazione del trigger su tutti i giorni alle 4: 30 PM e 1: 00 AM. Per prima cosa è necessario creare due nuovi oggetti trigger attività per le due pianificazioni.

$taskTrigger1 = New-ScheduledTaskTrigger -Daily -At 4:30PM$taskTrigger2 = New-ScheduledTaskTrigger -Daily -At 1:00AM

Quindi, per aggiornare il trigger dell’attività pianificata, utilizzare il comando seguente. Noterai che il parametro-Trigger accetta i due oggetti di attivazione dell’attività, ovvero$taskTrigger1 e$taskTrigger2.

Inoltre, poiché si sta aggiornando un’attività pianificata con una password salvata per l’account utente, sarà necessario fornire nuovamente i valori-User e-Password.

Set-ScheduledTask -TaskName 'ExportAppLog' -Trigger $taskTrigger1,$taskTrigger2 -User 'DEVPC\svcTask' -Password 'PASSWORD'

Di seguito è riportato il risultato atteso dopo l’esecuzione del codice.

Aggiornamento l’attività pianificata con più trigger

E come potete vedere qui sotto, ci sono due trigger nel ExportAppLog attività pianificata.

L’operazione Pianificata con più trigger

l’Eliminazione e Ripristino di un’Attività Pianificata

Operazioni Pianificate possono diventare obsoleti nel tempo. Ad un certo punto, potrebbe essere necessario eseguire le pulizie per le attività pianificate. In questa sezione, imparerai come gestire l’eliminazione pianificata delle attività in PowerShell.

Backup di un’attività pianificata

Prima di procedere all’eliminazione delle attività pianificate, è buona norma eseguire prima un backup. Il backup delle attività pianificate offre un punto di ripristino per quando le cose vanno male.

Non esiste un cmdlet integrato per eseguire il backup di un’attività pianificata. Ma tutto in PowerShell è un oggetto e l’esportazione di oggetti in file è possibile. Quando è necessario eseguire il backup di un oggetto in un file, utilizzare il cmdletImport-Clixml.

Il codice di esempio riportato di seguito esporta l’attività pianificata con il nome ExportAppLog in un file. È possibile modificare il nome del file e la posizione in base alle proprie preferenze.

L’immagine seguente mostra il file XML di output previsto.

eseguire il backup di una Operazione Pianificata

la Cancellazione di un’Attività Pianificata

una Volta che hai ottenuto un backup dell’attività pianificata, è ora possibile rimuovere l’operazione pianificata. Il codice seguente elimina l’attività pianificata con il nome ExportAppLog. Copia il codice qui sotto ed esegui in PowerShell.

# Unregister the scheduled taskUnregister-ScheduledTask -TaskName 'ExportAppLog' -Confirm:$false

Anche se non richiesto, è sempre bene confermare il risultato dell’eliminazione dell’attività pianificata. Utilizzare il comando seguente per verificare che l’attività pianificata non esista più.

Get-ScheduledTask -TaskName 'ExportAppLog'

Se l’attività pianificata non esiste più, dovresti ottenere un output come quello mostrato di seguito.

Verifica se l’operazione pianificata non esiste più

Nota che l’operazione pianificata backup non include le password.

Ripristino di un’attività pianificata

Quindi hai eliminato l’attività pianificata, e poi si scopre che non avresti dovuto! E adesso? Questo tipo di situazione ti fa apprezzare ancora di più il concetto di backup.

È possibile ricreare l’attività pianificata utilizzando il file di backup XML con PowerShell. Ed ecco come puoi fare il ripristino.

In primo luogo, importare il backup XML nella sessione PowerShell. Il codice seguente importa il file c:\temp\ExportAppLog.XML. Di conseguenza, la variabile $stBackup manterrà i dati importati.

# Import the Schedule Task backup$stBackup = Import-Clixml -Path c:\temp\ExportAppLog.xml

Quindi, utilizzare il codice seguente per reimpostare il valore LogOnTypedel task principal su Interactive. La reimpostazione del valore LogonType è fondamentale per garantire il corretto ripristino dell’attività pianificata.

# Reset the logon type to "Run only when the user is logged on."$stBackup.Principal.LogonType = 'Interactive'

Il passo successivo è creare un nuovo oggetto Attività pianificata. Il codice seguente crea una nuova attività pianificata. La variabile$restoreTask memorizza l’oggetto dell’attività pianificata risultante.

Noterai che i valori passati ai parametri sono quelli importati dal backup. I valori importati sono nella variabile$restoreTask. I parametri sono: ActionTriggerSettings e Principal.

Dopo aver creato l’attività pianificata oggetto, è il momento di registrare l’attività pianificata. Utilizzare il codice seguente per registrare l’attività pianificata ripristinata.

In questo esempio, il nome dell’attività è ‘ExportAppLog_restored.’ Il parametroInputObject accetta l’oggetto attività pianificata nella variabile$restoreTask. Assicurarsi di utilizzare i valori corretti userepassword.

Il codice è ora completo. Copia ed esegui il codice in PowerShell per ripristinare l’attività pianificata eliminata. Lo screenshot qui sotto mostra l’output previsto dopo l’esecuzione del codice.

Ripristino di un’attività pianificata eliminata da un backup XML

Ora l’attività pianificata è registrata nel sistema. Lo screenshot qui sotto mostra l’attività pianificata ripristinata.

Trovare l’attività pianificata ripristinata

Riepilogo

La funzione Attività pianificate in Windows è uno strumento eccellente per l’impostazione delle attività o lavori. È possibile creare le attività più basilari a quelle più complesse. Le impostazioni e le opzioni sono flessibili.

Con il modulo Attività pianificate PowerShell, è possibile impostare le attività pianificate utilizzando i comandi PowerShell. Questo modulo offre l’opportunità e i mezzi per creare e distribuire le attività pianificate a livello di codice sui computer locali e remoti.

Microsoft non ha aggiornato il modulo ScheduledTasks e alcune impostazioni avanzate non sono ancora facilmente esposte come cmdlet PowerShell. Un esempio è la creazione di un trigger per “On workstation unlock.”Tuttavia, è possibile ottenere queste impostazioni avanzate utilizzando la classe CIM dell’utilità di pianificazione esistente.

Tuttavia, il modulo PowerShell Scheduled Tasks è ancora uno strumento eccellente e capace che puoi aggiungere al tuo arsenale PowerShell.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.