Ottiene i risultati dei processi in background di Windows PowerShell nella sessione corrente.

Sintassi

Receive-Job [-Job] <Job[]> [[-ComputerName] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [[-InstanceId] <Guid[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Job] <Job[]> [[-Location] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [[-Name] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Job] <Job[]> [[-Session] <PSSession[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Id] <Int32[]> [-Keep] [-NoRecurse] [<CommonParameters>]

Descrizione

Il cmdlet Receive-Job ottiene i risultati dei processi in background di Windows PowerShell. Utilizzare Receive-Job per ottenere i risultati dei processi avviati tramite il cmdlet Start-Job o il parametro AsJob di qualsiasi cmdlet. È possibile ottenere i risultati di tutti i processi o identificare i processi tramite il nome, l'ID, l'ID istanza, il nome del computer, il percorso, la sessione o inviando un oggetto processo.

Quando si avvia un processo in background di Windows PowerShell, il processo viene avviato, ma i risultati non vengono visualizzati immediatamente. Il comando restituisce invece un oggetto che rappresenta il processo in background. L'oggetto processo contiene informazioni utili sul processo, ma non contiene i risultati. Questo metodo consente di continuare a lavorare nella sessione mentre il processo è in esecuzione. Per ulteriori informazioni sui processi in background di Windows PowerShell, vedere about_Jobs.

Per ottenere i risultati del comando, utilizzare il cmdlet Receive-Job. Tramite Receive-Job si ottengono i risultati generati nel momento in cui viene inviato il comando Receive-Job. Se i risultati non sono ancora completi, è possibile eseguire comandi Receive-Job aggiuntivi per ottenere i risultati restanti.

Per impostazione predefinita, i risultati del processo vengono eliminati dal sistema al momento della loro ricezione, ma è possibile utilizzare il parametro Keep per salvare i risultati in modo da poterli ricevere nuovamente. Per eliminare i risultati del processo, riceverli nuovamente (senza parametro Keep), chiudere la sessione oppure utilizzare il cmdlet Remove-Job per eliminare il processo dalla sessione.

Parametri

-ComputerName <string[]>

Ottiene i risultati dei processi eseguiti nei computer specificati. Immettere i nomi dei computer. Il valore predefinito è impostato su tutti i processi della sessione corrente.

Questo parametro consente di eseguire la selezione tra i risultati dei processi archiviati nel computer locale. Non ottiene dati dai computer remoti. Per ottenere i risultati dei processi archiviati nei computer remoti, utilizzare il cmdlet Invoke-Command per eseguire un comando Receive-Job in modalità remota.

Obbligatorio?

false

Posizione?

2

Valore predefinito

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

-Id <Int32[]>

Ottiene i risultati dei processi con gli ID specificati. Il valore predefinito è impostato su tutti i processi della sessione corrente.

L'ID è un valore intero che identifica in modo univoco il processo all'interno della sessione corrente. È più facile da ricordare e digitare rispetto all'ID istanza, ma è univoco solo nella sessione corrente. È possibile digitare uno o più ID (separati da virgole). Per trovare l'ID di un processo, digitare "Get-Job" senza parametri.

Obbligatorio?

true

Posizione?

1

Valore predefinito

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

-InstanceId <Guid[]>

Ottiene i risultati dei processi con gli ID istanza specificati. Il valore predefinito è impostato su tutti i processi della sessione corrente.

Un ID istanza è un GUID che identifica in modo univoco il processo nel computer. Per trovare l'ID istanza di un processo, utilizzare il cmdlet Get-Job.

Obbligatorio?

false

Posizione?

1

Valore predefinito

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

-Job <Job[]>

Specifica il processo per il quale vengono recuperati i risultati. Questo parametro è obbligatorio in un comando Receive-Job. Immettere una variabile che contiene il processo o un comando che consenta di ottenerlo. È inoltre possibile reindirizzare un oggetto processo a Receive-Job.

Obbligatorio?

true

Posizione?

1

Valore predefinito

Accettare input da pipeline?

true (ByValue, ByPropertyName)

Accettare caratteri jolly?

false

-Keep

Salva i risultati del processo nel sistema, anche dopo che sono stati ricevuti dall'utente. Per impostazione predefinita i risultati del processo vengono eliminati una volta recuperati.

Per eliminare questi risultati, utilizzare Receive-Job per riceverli nuovamente senza il parametro Keep, chiudere la sessione oppure utilizzare il cmdlet Remove-Job per eliminare il processo dalla sessione.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Location <string[]>

Ottiene solo i risultati dei processi con il percorso specificato. Il valore predefinito è impostato su tutti i processi della sessione corrente.

Obbligatorio?

false

Posizione?

2

Valore predefinito

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

-Name <string[]>

Ottiene i risultati dei processi con il nome descrittivo specificato. Il valore predefinito è impostato su tutti i processi della sessione corrente.

Obbligatorio?

false

Posizione?

1

Valore predefinito

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

-NoRecurse

Ottiene i risultati solo dal processo specificato. Per impostazione predefinita Receive-Job ottiene anche i risultati di tutti i processi figlio del processo specificato.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Session <PSSession[]>

Ottiene i risultati dei processi eseguiti nella sessione di Windows Powershell specificata (PSSession). Immettere una variabile che contiene la sessione PSSession o un comando che consenta di ottenere tale sessione, ad esempio Get-PSSession. Il valore predefinito è impostato su tutti i processi della sessione corrente.

Obbligatorio?

false

Posizione?

2

Valore predefinito

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

<CommonParameters>

Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.

Input e output

Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.

Input

System.Management.Automation.Job

È possibile reindirizzare gli oggetti processo a Receive-Job.

Output

PSObject

Receive-Job restituisce i risultati dei comandi nel processo.

Esempio 1

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> receive-job -job $job

Descrizione
-----------
In questi comandi viene utilizzato il parametro Job per ottenere i risultati di un determinato processo. Il primo comando utilizza il cmdlet Start-Job per avviare un processo in cui viene eseguito un comando "Get-Process". Viene utilizzato l'operatore di assegnazione (=) per salvare l'oggetto processo risultante nella variabile $job.

Il secondo comando utilizza il cmdlet Receive-Job per ottenere i risultati del processo. Viene utilizzato il parametro Job per specificare il processo.






Esempio 2

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> $job | receive-job

Descrizione
-----------
Questo esempio corrisponde all'Esempio 2, con l'eccezione che nel comando viene utilizzato un operatore pipeline (|) per inviare l'oggetto processo a Receive-Job. Di conseguenza, per il comando non è necessario un parametro Job per specificare il processo.






Esempio 3

C:\PS>$j = invoke-command -computername Server01, Server02, Server03 -scriptblock {get-service} -AsJob

C:\PS> $j.childjobs

Id   Name     State      HasMoreData   Location       Command
--   ----     -----      -----------   --------       -------
2    Job2     Completed  True          Server01       get-service
3    Job3     Completed  True          Server02       get-service
4    Job4     Completed  True          Server03       get-service

C:\PS> receive-job -name Job3  -keep

Status  Name        DisplayName                        PSComputerName
------  ----------- -----------                        --------------
Running AeLookupSvc Application Experience             Server02
Stopped ALG         Application Layer Gateway Service  Server02
Running Appinfo     Application Information            Server02
Running AppMgmt     Application Management             Server02

Descrizione
-----------
In questi comandi viene utilizzato il parametro Name di Receive-Job per ottenere i risultati di uno dei diversi processi in background eseguiti nei computer remoti. 

Il primo comando utilizza il cmdlet Invoke-Command per avviare un processo in background che esegue un comando Get-Service in tre computer remoti. Viene utilizzato il parametro AsJob per eseguire il comando come processo in background. L'oggetto processo risultante viene salvato nella variabile $j.

Quando si utilizza il parametro AsJob di Invoke-Command per avviare un processo, l'oggetto processo viene creato nel computer locale, anche se il processo viene eseguito nei computer remoti. Di conseguenza, vengono utilizzati comandi locali per gestire il processo.

Inoltre, quando si utilizza AsJob, in Windows PowerShell viene restituito un oggetto processo che contiene un processo figlio per ogni processo avviato. In questo caso, l'oggetto processo contiene tre processi figlio, uno per ogni processo in ciascun computer remoto.

Il secondo comando utilizza il metodo con punto per visualizzare il valore della proprietà ChildJobs dell'oggetto processo in $j. Si noti che tramite il comando sono stati creati tre processi figlio, uno per ogni processo su ciascun computer remoto.
 
Il terzo comando utilizza il cmdlet Receive-Job per ottenere i risultati del processo figlio Job3 eseguito sul computer Server02. Vengono utilizzati il parametro Name per specificare il nome del processo figlio e il parametro Keep per salvare i risultati del processo anche dopo la ricezione.






Esempio 4

C:\PS>$s = new-pssession -computername Server01, Server02, Server03

C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog -logname system}}

C:\PS> $j

Id   Name     State      HasMoreData   Location   Command
--   ----     -----      -----------   --------   -------
1    Job1     Completed  True          Localhost  get-eventlog system
2    Job2     Completed  True          Localhost  get-eventlog system
3    Job3     Completed  True          Localhost  get-eventlog system

C:\PS> $results = invoke-command -session $s -scriptblock {param($j) receive-job -job $j} -ArgumentList $j

Descrizione
-----------
In questo esempio viene illustrato come ottenere i risultati dei processi in background eseguiti in tre computer remoti.

Il primo comando utilizza il cmdlet New-PSSession per creare tre sessioni PSSession, una in ognuno dei server specificati nel comando. Le sessioni PSSession vengono quindi salvate nella variabile $s.

Il secondo comando utilizza il cmdlet Invoke-Command per eseguire un comando Start-Job in ognuna delle sessioni PSSession della variabile $s. Nel processo viene eseguito un comando Get-Eventlog che consente di ottenere gli eventi presenti nel registro eventi di sistema. I risultati vengono salvati nella variabile $j.

Poiché viene utilizzato Invoke-Command per eseguire il comando Start-Job, in realtà vengono avviati tre processi indipendente in ciascun computer. Di conseguenza, vengono restituiti tre oggetti processo che rappresentano i tre processi eseguiti in locale in tre computer diversi.

Il terzo comando visualizza i tre oggetti processo in $j.  

Con il quarto comando si utilizza Invoke-Command per eseguire un comando Receive-Job in ognuna delle sessioni PSSession in $s e per salvare i risultati nella variabile $results.

Poiché $j è una variabile locale, il blocco di script utilizza la parola chiave "param" per dichiarare le variabili nel comando e il parametro ArgumentList per fornire il valore di $j.






Vedere anche




Argomenti della Guida