Assicurati di leggere gli articoli precedenti della serie:
- Scopri come automatizzare Windows con PowerShell
- Imparare a utilizzare i cmdlet in PowerShell
- Apprendimento Come utilizzare gli oggetti in PowerShell
- Apprendimento della formattazione, del filtro e del confronto in PowerShell
- Impara a utilizzare i servizi remoti in PowerShell
- Utilizzo di PowerShell per ottenere informazioni sul computer
- Lavorare con le raccolte in PowerShell
E rimanete sintonizzati per il resto della serie per tutta la settimana.
Lavori in background
Fino ad ora tutto ciò che ti ho mostrato in PowerShell è stato sincrono, nel senso che scriviamo qualcosa nella shell e non possiamo fare molto finché il comando non ha finito di eseguirlo. Qui è dove arrivano i lavori in background. Per avviare uno sfondo, il lavoro passa semplicemente un blocco di script al cmdlet Start-Job.
Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}
Get-Job –Name GetFileList | Stop-Job
Get-Job –Name GetFileList | Receive-Job –Keep
Get-Job –Name GetFileList | Remove-Job
Questo lo rimuoverà dall'elenco di lavori che vengono restituiti da Get-Job.
Lavori remoti
Qualche lezione fa, abbiamo esaminato come utilizzare i servizi remoti per eseguire i comandi di PowerShell su una macchina remota usando Invoke-Command, ma sapevi che puoi usare Invoke-Command anche per avviare un lavoro di remoting in background? Per fare ciò, aggiungi semplicemente il parametro -AsJob alla fine del tuo comando:
Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob
Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper
Get-Job -Id 3 –IncludeChildJob
Get-Job -Id 5 | Receive-Job –Keep
Lavori WMI
I lavori WMI sono molto simili ai lavori remoti, richiedendo solo il parametro -AsJob da aggiungere al cmdlet Get-WmiObject.
Lavori pianificati
Gli ultimi tre tipi di lavoro che abbiamo esaminato non erano persistenti, il che significa che sono disponibili solo nella sessione corrente. In sostanza, ciò significa che se si avvia un lavoro e si apre un'altra Console PowerShell ed è in esecuzione Get-Job, non verranno visualizzati lavori. Tuttavia, torna alla console da cui hai dato il via, sarai in grado di vedere il suo stato. Questo è in contrasto con i lavori programmati che sono persistenti. In sostanza, un lavoro pianificato è un blocco di script eseguito su una pianificazione. In passato, lo stesso effetto avrebbe potuto essere ottenuto utilizzando l'Utilità di pianificazione di Windows, che è davvero ciò che sta accadendo sotto il cofano. Per creare un nuovo lavoro pianificato, facciamo quanto segue:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
C'è parecchio da fare in quel comando, quindi scomporlo.
- Innanzitutto, diamo al nostro Job pianificato un nome di GetEventLogs.
- Diciamo quindi che quando viene attivato, vogliamo che esso esegua il contenuto del blocco di script specificato, che in pratica ottiene le ultime 100 voci del registro degli eventi di sicurezza.
- Successivamente, specifichiamo un trigger. Poiché il parametro trigger prende un oggetto trigger come input, abbiamo usato un comando parentetico per generare un trigger che andrà via ogni giorno alle 17:00.
- Poiché abbiamo a che fare con il registro eventi, dobbiamo eseguire come amministratore, che possiamo specificare creando un nuovo oggetto ScheduledJobOption e passandolo al parametro ScheduledJobOption.
Get-ScheduledJob