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