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




Argomenti della Guida