Receive-Job
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
Concetti
about_Jobs
about_Job_Details
about_Remote_Jobs
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command