ARGOMENTO
about_Job_Details
DESCRIZIONE BREVE
Fornisce dettagli sui processi in background in computer locali e
remoti.
DESCRIZIONE DETTAGLIATA
In questo argomento viene illustrato il concetto di processo in
background e vengono fornite informazioni tecniche sul
funzionamento di tali processi in Windows PowerShell.
Questo argomento è un supplemento agli argomenti about_Jobs e
about_Remote_Jobs.
Importante: i processi in background avviati mediante il parametro
Start-Job o AsJob di Invoke-Command sono basati sull'infrastruttura
remota di Windows PowerShell. Per utilizzare queste funzionalità,
è necessario configurare Windows PowerShell per la comunicazione
remota, anche se il processo in background viene eseguito
unicamente nel computer locale. Per ulteriori informazioni, vedere
about_Remote_Requirements.
INFORMAZIONI SUI PROCESSI IN BACKGROUND
Un processo in background esegue un comando o un'espressione in
modo asincrono. Potrebbe eseguire un cmdlet, una funzione, uno
script o qualsiasi altra attività basata su comandi. È stato
progettato per eseguire comandi che richiedono un periodo di
tempo prolungato, tuttavia è possibile utilizzarlo per eseguire
in background qualsiasi comando.
Quando viene eseguito un comando sincrono, il prompt dei comandi
di Windows PowerShell viene eliminato finché il comando non
risulta completato. Il prompt di Windows PowerShell non viene
eliminato da un processo in background. Un comando che avvia un
processo in background restituisce un oggetto processo. Il prompt
viene visualizzato immediatamente affinché sia possibile lavorare
su altre attività durante l'esecuzione del processo in background.
Tuttavia, quando si avvia un processo in background, i risultati
non vengono restituiti immediatamente, anche se l'esecuzione del
processo è molto rapida. L'oggetto processo restituito contiene
informazioni utili sul processo, ma non contiene i risultati
relativi. È necessario eseguire un comando separato per ottenere
i risultati del processo. È inoltre possibile eseguire comandi
per arrestare il processo, per attenderne il completamento e per
eliminarlo.
Per mantenere indipendente da altri comandi il calcolo del tempo
di un processo in background, eseguire ogni processo in background nel
proprio ambiente di Windows PowerShell ("sessione"). Può trattarsi
di una connessione temporanea creata unicamente per eseguire il processo
che verrà poi distrutta o di una sessione permanente (PSSession)
utilizzabile per eseguire più comandi o processi correlati.
UTILIZZO DEI CMDLET JOB
Utilizzare un comando Start-Job per avviare un processo in
background in un computer locale. Start-Job restituisce un
oggetto processo. È inoltre possibile ottenere oggetti che
rappresentano i processi avviati nel computer locale mediante il
cmdlet Get-Job.
Per ottenere i risultati del processo, utilizzare un comando
Receive-Job. Se il processo non è completo, Receive-Job
restituisce risultati parziali. È inoltre possibile utilizzare il
cmdlet Wait-Job per eliminare il prompt dei comandi finché uno o
tutti i processi avviati nella sessione non sono stati completati.
Per arrestare un processo in background, utilizzare il cmdlet
Stop-Job. Per eliminare un processo, utilizzare il cmdlet Remove-Job.
Per ulteriori informazioni sul funzionamento dei cmdlet, vedere
l'argomento della Guida per ogni cmdlet, nonché l'argomento
about_Jobs.
AVVIO DI PROCESSI IN BACKGROUND IN COMPUTER REMOTI
È possibile creare e gestire processi in background in un
computer locale o remoto. Per eseguire un processo in background in un
computer remoto, utilizzare il parametro AsJob di un cmdlet quale
Invoke-Command oppure utilizzare il cmdlet Invoke-Command per
eseguire un comando Start-Job in un computer remoto. È inoltre
possibile avviare un processo in background in una sessione interattiva.
Per ulteriori informazioni sui processi in background remoti, vedere
about_Remote_Jobs.
PROCESSI FIGLIO
Ogni processo in background comprende un processo padre e uno o
più processi figlio. Nei processi avviati mediante Start-Job o il
parametro AsJob di Invoke-Command, il processo padre è un
elemento esecutivo. Non esegue comandi né restituisce risultati.
I comandi vengono eseguiti dai processi figlio. (I processi
avviati mediante gli altri cmdlet potrebbero avere un
funzionamento diverso.)
I processi figlio vengono archiviati nella proprietà ChildJobs
dell'oggetto processo padre. La proprietà ChildJobs può contenere
uno o più oggetti processo figlio. Gli oggetti processo figlio
presentano un nome, un ID e un ID istanza diversi da quelli del
processo padre. Di conseguenza, è possibile gestire i processi
padre e figlio singolarmente o come unità.
Per visualizzare i processi padre e figlio di un processo,
utilizzare il cmdlet Get-Job per ottenere il processo padre, quindi
reindirizzare il processo a un comando Format-List per visualizzare
le proprietà Name e ChildJobs degli oggetti, come illustrato nel
comando seguente.
C:\PS> get-job | format-list -property Name, ChildJobs
Name : Job1
ChildJobs : {Job2}
È inoltre possibile utilizzare un comando Get-Job sul processo
figlio, come illustrato nel comando seguente:
C:\PS> get-job job2
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
2 Job2 Completed True localhost get-process
La configurazione del processo figlio dipende dal comando
utilizzato per avviare il processo.
-- Quando si utilizza Start-Job per avviare un processo in un
computer locale, il processo comprende un processo padre
esecutivo e un processo figlio che esegue il comando.
-- Quando si utilizza il parametro AsJob di Invoke-Command per
avviare un processo in uno o più computer, il processo
comprende un processo padre esecutivo e un processo figlio
per ogni processo eseguito in ciascun computer.
-- Quando si utilizza Invoke-Command per eseguire un comando
Start-Job in uno o più computer remoti, il risultato è
quello che si otterrebbe eseguendo un comando locale in
ciascun computer remoto. Il comando restituisce un oggetto
processo per ogni computer. L'oggetto processo comprende un
processo padre esecutivo e un processo figlio che esegue il
comando.
Il processo padre rappresenta tutti i processi figlio. Quando si
gestisce un processo padre, si gestiscono anche i processi figlio
associati. Ad esempio, quando si arresta un processo padre, si
arrestano anche tutti i processi figlio. Quando si ottengono i
risultati di un processo padre, si ottengono anche i risultati di
tutti i processi figlio.
È tuttavia possibile gestire i processi figlio singolarmente. È
consigliabile procedere in questo modo quando si desidera
analizzare un problema relativo a un processo o ottenere i
risultati di uno solo di una serie di processi figlio avviati
mediante il parametro AsJob di Invoke-Command. Il simbolo di
apice inverso [`] è il carattere di continuazione.
Il comando seguente utilizza il parametro AsJob di Invoke-Command
per avviare i processi in background nel computer locale e in due
computer remoti. Il comando salva il processo nella variabile $j.
C:\PS> $j = invoke-command -computername localhost, Server01, Server02 `
-command {get-date} -AsJob
Quando si visualizzano le proprietà Name e ChildJob del processo
in $j, viene indicato che il comando ha restituito un oggetto
processo con tre processi figlio, uno per ogni computer.
C:\PS> $j | format-list name, childjobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
Quando si visualizza il processo padre, viene indicato che il
processo non è riuscito.
C:\PS> $j
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job3 Failed True localhost,server... get-date
Quando si esegue un comando Get-Job in ognuno dei processi
figlio, viene indicato che un solo processo non è riuscito.
PS C:\ps-test> get-job job4, job5, job6
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
4 Job4 Completed True localhost get-date
5 Job5 Failed False Server01 get-date
6 Job6 Completed True Server02 get-date
Per ottenere i risultati di tutti i processi figlio, utilizzare
il cmdlet Receive-Job per ottenere i risultati del processo
padre. È inoltre possibile ottenere i risultati di un particolare
processo figlio, come illustrato nel comando seguente.
C:\PS> receive-job -job6 -keep | format-table ComputerName,
DateTime -auto
ComputerName DateTime
------------ --------
Server02 giovedì 13 marzo 2008 16.16.03
La funzionalità dei processi figlio dei processi in background di
Windows PowerShell consentono maggiore controllo sui processi
eseguiti.
VEDERE ANCHE
about_Jobs
about_Remote_Jobs
about_Remote
Invoke-Command
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
New-PSSession
Enter-PSSession
Exit-PSSession