ARGOMENTO
    about_Remote_Jobs

DESCRIZIONE BREVE
    Descrive come eseguire processi in background nei computer remoti.

DESCRIZIONE DETTAGLIATA
    Un processo in background è un comando che viene eseguito in modo 
    asincrono e non interagisce con la sessione corrente. Il prompt 
    dei comandi viene visualizzato immediatamente ed è possibile 
    continuare a utilizzare la sessione mentre il processo è in 
    esecuzione.

    Per impostazione predefinita, i processi in background vengono 
    eseguiti nel computer locale. Tuttavia, è possibile utilizzare 
    diverse procedure per eseguire processi in background nei 
    computer remoti. 

    In questo argomento viene illustrato come eseguire un processo in 
    background in un computer remoto. Per informazioni sull'esecuzione
    di processi in background in un computer locale, vedere 
    about_Jobs. Per ulteriori informazioni sui processi in 
    background, vedere about_Job_Details.


 PROCESSI IN BACKGROUND REMOTI

    È possibile eseguire processi in background nei computer remoti 
    tramite tre metodi diversi. 

    -- Avviare una sessione interattiva con un computer remoto e 
       avviare un processo nella sessione interattiva. Le procedure 
       sono analoghe all'esecuzione di un processo locale, sebbene 
       tutte le azioni vengano eseguite nel computer remoto.

    -- Eseguire un processo in background in un computer remoto che 
       restituisce i propri risultati al computer locale. Utilizzare 
       questo metodo quando si desidera raccogliere i risultati dei 
       processi in background e gestirli in una posizione centrale 
       nel computer locale.

    -- Eseguire un processo in background in un computer remoto che 
       mantiene i propri risultati nel computer remoto. Utilizzare 
       questo metodo quando i dati del processo sono gestiti in modo 
       più sicuro nel computer da cui provengono.  

 AVVIARE UN PROCESSO IN BACKGROUND IN UNA SESSIONE INTERATTIVA

    È possibile avviare una sessione interattiva con un computer 
    remoto e quindi avviare un processo in background durante la 
    sessione interattiva. Per ulteriori informazioni sulle sessioni 
    interattive, vedere about_Remote e Enter-PSSession.

    La procedura di avvio di un processo in background in una 
    sessione interattiva è pressoché identica alla procedura di avvio 
    di un processo in background nel computer locale. Tuttavia, tutte 
    le operazioni vengono eseguite nel computer remoto, anziché nel 
    computer locale.


    PASSAGGIO 1: ENTER-PSSESSION

    Utilizzare il cmdlet Enter-PSSession per avviare una sessione 
    interattiva con un computer remoto. È possibile utilizzare il 
    parametro ComputerName di Enter-PSSession per stabilire una 
    connessione temporanea per la sessione interattiva. In 
    alternativa, è possibile utilizzare il parametro Session per 
    eseguire la sessione interattiva nella sessione Windows 
    PowerShell (PSSession). 

    Il comando seguente avvia una sessione interattiva nel computer 
    Server01.
  
        C:\PS> Enter-PSSession -computername Server01

    Il prompt dei comandi viene modificato per indicare la 
    connessione al computer Server01.

        Server01\C:>


    PASSAGGIO 2: START-JOB

    Per avviare un processo in background nella sessione, utilizzare 
    il cmdlet Start-Job.

    Il comando seguente esegue un processo in background che ottiene 
    gli eventi del registro eventi di Windows PowerShell del computer 
    Server01. Il cmdlet Start-Job restituisce un oggetto che 
    rappresenta il processo. 

    Questo comando salva l'oggetto processo nella variabile $job. 

        Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}
   
    Mentre il processo è in esecuzione, è possibile utilizzare la 
    sessione interattiva per eseguire gli altri comandi, includendo 
    gli altri processi in background. Tuttavia, è necessario tenere 
    la sessione interattiva aperta finché non viene completato il 
    processo. Se si termina la sessione, il processo viene interrotto 
    e i risultati vengono persi.



    PASSAGGIO 3: GET-JOB

    Per sapere se il processo è completo, visualizzare il valore 
    della variabile job o utilizzare il cmdlet Get-Job per ottenere 
    il processo. Il comando seguente utilizza il cmdlet Get-Job per 
    visualizzare il processore.

        Server01\C:> get-job $job

        SessionId  Name  State      HasMoreData  Location   Command
        ---------  ----  -----      -----------  --------   -------
        1          Job1  Complete   True         localhost  get-eventlog "Windows PowerShell"

   
    L'output di Get-Job mostra che il processo è in esecuzione nel 
    computer "localhost" poiché è stato avviato ed è in esecuzione 
    nello stesso computer (in questo caso, Server01).
    


    PASSAGGIO 4: RECEIVE-JOB

    Per ottenere i risultati del processo, utilizzare il cmdlet 
    Receive-Job. È possibile visualizzare i risultati nella sessione 
    interattiva oppure salvarli in un file nel computer remoto. Il 
    comando seguente ottiene i risultati del processo nella variabile 
    $job. Il comando utilizza l'operatore di reindirizzamento (>) per 
    salvare i risultati del processo nel file PsLog.txt file nel 
    computer Server01.

        Server01\C:> receive-job $job > c:\logs\PsLog.txt



    PASSAGGIO 5: EXIT-PSSESSION

    Per terminare la sessione interattiva, utilizzare il cmdlet 
    Exit-PSSession. Il prompt dei comandi viene modificato per 
    mostrare che si è tornati alla sessione originale nel computer locale.

        Server01\C:> Exit-PSSession
        C:\PS>
         


    PASSAGGIO 6: INVOKE-COMMAND: GET CONTENT
     
    Per visualizzare in qualsiasi momento il contenuto del file 
    PsLog.txt nel computer Server01, avviare un'altra sessione 
    interattiva o eseguire un comando remoto. Questo tipo di comando 
    viene eseguito in modo migliore in una sessione PSSession 
    (connessione permanente) in caso si desideri utilizzare più 
    comandi per analizzare e gestire i dati del file PsLog.txt. Per 
    ulteriori informazioni sulle sessioni PSSession, vedere 
    about_PSSessions.

    I comandi seguenti utilizzando il cmdlet New-PSSession per creare 
    una sessione PSSession connessa al computer Server01 e utilizzano 
    il cmdlet Invoke-Command per eseguire un comando Get-Content 
    nella sessione PSSession per visualizzare il contenuto del file.

        C:\PS> $s = new-pssession -computername Server01
        C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslog.txt}


       
 AVVIARE UN PROCESSO REMOTO CHE RESTITUISCE I RISULTATI AL COMPUTER 
 LOCALE (ASJOB)

    Per avviare un processo in background in un computer remoto che 
    restituisce i risultati del comando al computer locale, 
    utilizzare il parametro AsJob di un cmdlet quale il cmdlet 
    Invoke-Command. 

    Quando si utilizza il parametro AsJob, l'oggetto processo viene 
    in realtà creato nel computer locale, anche se il processo viene 
    eseguito nel computer remoto. Al completamento del processo, i 
    risultati vengono restituiti al computer locale. 

    È possibile utilizzare i cmdlet che contengono il nome Job 
    (cmdlet Job) per gestire qualsiasi processo creato da qualsiasi 
    cmdlet. Molti dei cmdlet che dispongono di parametri AsJob non 
    utilizzano la comunicazione remota di Windows PowerShell ed è 
    pertanto possibile utilizzarli anche in computer non configurati 
    per la comunicazione remota e che non soddisfano i requisiti per 
    la comunicazione remota.
 

    PASSAGGIO 1: INVOKE-COMMAND -ASJOB

    Il comando seguente utilizza il parametro AsJob di Invoke-Command 
    per avviare un processo in background nel computer Server01. Il 
    processo esegue un comando Get-Eventlog che consente di ottenere 
    gli eventi presenti nel registro eventi di sistema. È possibile 
    utilizzare il parametro JobName per assegnare un nome 
    visualizzato al processo.

       invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob 

    I risultati del comando sono analoghi all'output di esempio seguente.


       SessionId   Name    State      HasMoreData     Location   Command
       ---------   ----    -----      -----------     --------   -------
       1           Job1    Running    True            Server01   get-eventlog system

    Quando viene utilizzato il parametro AsJob, Invoke-Command 
    restituisce lo stesso tipo di oggetto processo restituito da 
    Start-Job. È possibile salvare l'oggetto processo in una 
    variabile oppure utilizzare un comando Get-Job per ottenere il 
    processo.

    Notare che il valore della proprietà Location mostra che il 
    processo viene eseguito nel computer Server01.  


    PASSAGGIO 2: GET-JOB

    Per gestire un processo avviato mediante il parametro AsJob del 
    cmdlet Invoke-Command, utilizzare i cmdlet Job. Poiché l'oggetto 
    processo che rappresenta il processo remoto si trova nel computer 
    locale, non è necessario eseguire comandi remoti per gestire il 
    processo.  

    Per determinare se il processo è completo, utilizzare un comando 
    Get-Job. Il comando seguente ottiene tutti processi avviati nella 
    sessione corrente. 

        get-job

    Poiché il processo remoto è stato avviato nella sessione 
    corrente, lo si ottiene con un comando Get-Job locale. La 
    proprietà State dell'oggetto processo mostra che il comando è 
    stato completato correttamente.
       
       SessionId   Name   State      HasMoreData     Location   Command
       ---------   ----   -----      -----------     --------   -------
       1           Job1   Completed  True            Server01   get-eventlog system


    PASSAGGIO 3: RECEIVE-JOB

    Per ottenere i risultati del processo, utilizzare il cmdlet 
    Receive-Job. Poiché i risultati del processo sono restituiti 
    automaticamente al computer in cui l'oggetto processo risiede, è 
    possibile ottenere i risultati con un comando Receive-Job locale.

    Il comando seguente utilizza il cmdlet Receive-Job per ottenere i 
    risultati del processo. Utilizza l'ID sessione per identificare 
    il processo. Questo comando salva i risultati del processo nella 
    variabile $results. È anche possibile reindirizza i risultati in 
    un file.

       $results = receive-job -id 1
    


 AVVIARE UN PROCESSO REMOTO CHE MANTIENE I RISULTATI NEL COMPUTER REMOTO

    Per avviare un processo in background in un computer remoto che 
    mantiene i risultati del comando nel computer remoto, utilizzare 
    il cmdlet Invoke-Command per eseguire un comando Start-Job in un 
    computer remoto. È possibile utilizzare questo metodo per 
    eseguire processi in background in più computer.

    Quando si esegue un comando Start-Job in modalità remota, 
    l'oggetto processo viene creato nel computer remoto e i risultati 
    del processo vengono mantenuti nel computer remoto.
    Dalla prospettiva del processo, tutte le operazioni sono locali. 
    Si eseguono comandi in modalità remota esclusivamente per gestire 
    un processo locale nel computer remoto.


    PASSAGGIO 1: INVOKE-COMMAND START-JOB

    Utilizzare il cmdlet Invoke-Command per eseguire un comando 
    Start-Job in un computer remoto. 

    Questo comando richiede una sessione PSSession (connessione 
    permanente). Se si utilizza il parametro ComputerName di 
    Invoke-Command per stabilire una connessione temporanea, il 
    comando Invoke-Command è considerato completo quando viene 
    restituito l'oggetto processo. Di conseguenza, la connessione 
    temporanea viene chiusa e il processo viene annullato.
 
    Il comando seguente utilizza il cmdlet New-PSSession per creare 
    una sessione PSSession connessa al computer Server01. Il comando 
    salva la sessione PSSession nella variabile $s.

        $s = new-pssession -computername Server01


    Il comando successivo utilizza il cmdlet Invoke-Command per 
    eseguire un comando Start-Job nella sessione PSSession. Il 
    comando Start-Job e il comando Get-Eventlog sono racchiusi tra 
    parentesi graffe.

       invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}

    I risultati sono analoghi all'output di esempio seguente.


       Id       Name    State      HasMoreData     Location   Command
       --       ----    -----      -----------     --------   -------
       2        Job2    Running    True            Localhost  get-eventlog system

    Quando si esegue un comando Start-Job in modalità remota, 
    Invoke-Command restituisce lo stesso tipo di oggetto processo 
    restituito da Start-Job. È possibile salvare l'oggetto processo 
    in una variabile oppure utilizzare un comando Get-Job per 
    ottenere il processo.

    Notare che il valore della proprietà Location mostra che il 
    processo è in esecuzione nel computer locale, denominato 
    "LocalHost" anche se il processo è in esecuzione sul computer 
    Server01. Poiché l'oggetto processo viene creato nel computer 
    Server01 e il processo viene eseguito nello stesso computer, 
    viene considerato un processo in background locale.  


    PASSAGGIO 2: INVOKE-COMMAND GET-JOB

    Per gestire un processo in background remoto, utilizzare i cmdlet 
    Job. Poiché l'oggetto processo si trova nel computer remoto, è 
    necessario eseguire comandi remoti per ottenere, arrestare, 
    attendere o recuperare i risultati del processo.  

    Per verificare se il processo è completo, utilizzare un comando 
    Invoke-Command per eseguire un comando Get-Job nella sessione 
    PSSession connessa al computer Server01.

        invoke-command -session $s -scriptblock {get-job}

    Il comando restituisce un oggetto processo. La proprietà State 
    dell'oggetto processo mostra che il comando è stato completato 
    correttamente.

       SessionId       Name    State      HasMoreData     Location     Command
       ---------       ----    -----      -----------     --------     -------
       2               Job2    Completed  True            LocalHost    get-eventlog system

    PASSAGGIO 3: INVOKE-COMMAND RECEIVE-JOB

    Per ottenere i risultati del processo, utilizzare il cmdlet 
    Invoke-Command per eseguire un comando Receive-Job nella sessione 
    PSSession connessa al computer Server01.

    Il comando seguente utilizza il cmdlet Receive-Job per ottenere i 
    risultati del processo. Utilizza l'ID sessione per identificare 
    il processo. Questo comando salva i risultati del processo nella 
    variabile $results. Utilizza il parametro Keep di Receive-Job per 
    mantenere nel computer remoto il risultato nella cache del processo.

        $results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep}

    È anche possibile reindirizzare i risultati a un file nel 
    computer locale o remoto. Il comando seguente utilizza un operatore di 
    reindirizzamento per salvare i risultati in un file nel computer Server01.

        invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt}


VEDERE ANCHE
    about_Jobs
    about_Job_Details
    about_Remote
    Invoke-Command
    Start-Job
    Get-Job
    Wait-Job
    Stop-Job
    Remove-Job
    New-PSSession
    Enter-PSSession
    Exit-PSSession




Argomenti della Guida