Ottiene i processi in background di Windows PowerShell in esecuzione nella sessione corrente.
Sintassi
Get-Job [-Command <string[]>] [<CommonParameters>] Get-Job [[-InstanceId] <Guid[]>] [<CommonParameters>] Get-Job [[-Name] <string[]>] [<CommonParameters>] Get-Job [[-Id] <Int32[]>] [<CommonParameters>] Get-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [<CommonParameters>]
Descrizione
Il cmdlet Get-Job ottiene oggetti che rappresentano i processi in background avviati nella sessione corrente. È possibile utilizzare Get-Job per ottenere i processi avviati tramite Start-Job o tramite il parametro AsJob di qualsiasi cmdlet.
Senza parametri, un comando "Get-Job" consente di ottenere tutti i processi della sessione corrente. È possibile utilizzare i parametri di Get-Job per ottenere determinati processi.
L'oggetto processo restituito da Get-Job contiene informazioni utili sul processo, ma non contiene i risultati. Per ottenere i risultati del processo, utilizzare il cmdlet Receive-Job.
Un processo in background di Windows PowerShell è un comando che viene eseguito "in background" senza interagire con la sessione corrente. In genere, un processo in background viene utilizzato per eseguire un comando complesso il cui completamento richiede molto tempo. Per ulteriori informazioni sui processi in background di Windows PowerShell, vedere about_Jobs.
Parametri
-Command <string[]>
Ottiene i processi che includono il comando specificato. Il valore predefinito è impostato su tutti i processi. Immettere un comando (come stringa). È possibile utilizzare caratteri jolly per specificare un modello di comando.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
All jobs |
Accettare input da pipeline? |
true (ByPropertyName) |
Accettare caratteri jolly? |
true |
-Id <Int32[]>
Ottiene solo i processi con gli ID specificati.
L'ID è un valore intero che identifica in modo univoco il processo all'interno della sessione corrente. È più facile da ricordare e da 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? |
false |
Posizione? |
1 |
Valore predefinito |
|
Accettare input da pipeline? |
true (ByPropertyName) |
Accettare caratteri jolly? |
false |
-InstanceId <Guid[]>
Ottiene i processi con gli ID istanza specificati. Il valore predefinito è impostato su tutti i processi.
Un ID istanza è un GUID che identifica in modo univoco il processo nel computer. Per trovare l'ID istanza di un processo, utilizzare Get-Job.
Obbligatorio? |
false |
Posizione? |
1 |
Valore predefinito |
|
Accettare input da pipeline? |
true (ByPropertyName) |
Accettare caratteri jolly? |
true |
-Name <string[]>
Ottiene il processo con i nomi descrittivi specificati. Immettere il nome di un processo o utilizzare caratteri jolly per immettere un modello di nome di processo. Per impostazione predefinita, Get-Job consente di ottenere tutti i processi della sessione corrente.
Obbligatorio? |
false |
Posizione? |
1 |
Valore predefinito |
|
Accettare input da pipeline? |
true (ByPropertyName) |
Accettare caratteri jolly? |
true |
-State <JobState>
Ottiene solo i processi nello stato specificato. I valori validi sono NotStarted, Running, Completed, Stopped, Failed e Blocked. Per impostazione predefinita, Get-Job ottiene tutti i processi della sessione corrente.
Obbligatorio? |
false |
Posizione? |
named |
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 |
Nessuno Non è possibile reindirizzare l'input a questo cmdlet. |
Output |
System.Management.Automation.RemotingJob Get-Job restituisce gli oggetti che rappresentano i processi nella sessione. |
Esempio 1
C:\PS>get-job Descrizione ----------- Tramite questo comando è possibile ottenere tutti i processi in background avviati nella sessione corrente. Non include processi creati in altre sessioni, anche se vengono eseguiti nel computer locale.
Esempio 2
C:\PS>$j = get-job -name Job1 C:\PS> $ID = $j.InstanceID C:\PS> $ID Guid ---- 03c3232e-1d23-453b-a6f4-ed73c9e29d55 C:\PS> stop-job -instanceid $ID Descrizione ----------- Tramite questi comandi viene illustrato come ottenere l'ID istanza di un processo e successivamente come utilizzarlo per arrestare un processo. A differenza del nome di un processo, che non è univoco, l'ID istanza è univoco. Nel primo comando viene utilizzato il cmdlet Get-Job per ottenere un processo. Viene utilizzato il parametro Name per identificare il processo. Il comando consente di archiviare l'oggetto processo restituito da Get-Job nella variabile $j. In questo esempio, è presente un solo processo con il nome specificato. Con il secondo comando si ottiene la proprietà InstanceId dell'oggetto nella variabile $j e la si archivia nella variabile $ID. Con il terzo comando viene visualizzato il valore della variabile $ID. Nel quarto comando viene utilizzato il cmdlet Stop-Job per interrompere il processo. Viene utilizzato il parametro InstanceId per identificare il processo e la variabile $ID per rappresentare l'ID istanza del processo.
Esempio 3
C:\PS>get-job -command "*get-process*" Descrizione ----------- Tramite questo comando vengono ottenuti i processi del sistema che includono un comando Get-Process. Viene utilizzato il parametro Command di Get-Job per limitare i processi recuperati. Vengono utilizzati caratteri jolly (*) per ottenere processi che includono un comando Get-Process in qualsiasi punto della stringa di comando.
Esempio 4
C:\PS>"*get-process*" | get-job Descrizione ----------- Analogamente al comando dell'esempio precedente, tramite questo comando vengono ottenuti i processi del sistema che includono un comando Get-Process. Viene utilizzato un operatore pipeline (|) per inviare una stringa (tra virgolette doppie) al cmdlet Get-Job. Equivale al comando precedente.
Esempio 5
C:\PS>get-job -state NotStarted Descrizione ----------- Con questo comando si ottengono solo i processi che sono stati creati ma non ancora avviati. Sono inclusi i processi la cui esecuzione è pianificata in futuro e quelli non ancora pianificati.
Esempio 6
C:\PS>get-job -name job* Descrizione ----------- Tramite questo comando vengono ottenuti tutti i processi che dispongono di nomi che iniziano con "job". Poiché "job<numero>" è il nome predefinito per un processo, questo comando consente di ottenere tutti i processi che non dispongono di un nome assegnato in modo esplicito.
Esempio 7
C:\PS>start-job -scriptblock {get-process} -name MyJob C:\PS> $j = get-job -name MyJob C:\PS> $j Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 1 myjob Completed True localhost get-process C:\PS> receive-job -job $j Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 124 4 13572 12080 59 1140 audiodg 783 16 11428 13636 100 548 CcmExec 96 4 4252 3764 59 3856 ccmsetup ... Descrizione ----------- In questo esempio viene illustrato come utilizzare Get-Job per ottenere un oggetto processo e successivamente come utilizzare l'oggetto processo per rappresentare il processo in un comando. Nel primo comando viene utilizzato il cmdlet Start-Job per avviare un processo in background che esegue un comando Get-Process nel computer locale. Viene utilizzato il parametro Name di Start-Job per assegnare un nome descrittivo al processo. Nel secondo comando viene utilizzato Get-Job per ottenere il processo. Viene utilizzato il parametro Name di Get-Job per identificare il processo. L'oggetto processo risultante viene salvato nella variabile $j. Con il terzo comando viene visualizzato il valore dell'oggetto processo nella variabile $j. Il valore della proprietà State indica che il processo è completo. Il valore della proprietà HasMoreData indica che sono disponibili risultati del processo che non sono ancora stati recuperati. Nel quarto comando viene utilizzato il cmdlet Receive-Job per ottenere i risultati del processo. Viene utilizzato l'oggetto processo nella variabile $j per rappresentare il processo. È anche possibile utilizzare un operatore pipeline per inviare un oggetto processo a Receive-Job.
Esempio 8
C:\PS>start-job -scriptblock {get-eventlog system} C:\PS> invoke-command -computername S1 -scriptblock {get-eventlog system} -AsJob C:\PS> invoke-command -computername S2 -scriptblock {start-job -scriptblock {get-eventlog system}} C:\PS> get-job Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 1 Job1 Running True localhost get-eventlog system 2 Job2 Running True S1 get-eventlog system C:\PS> invoke-command -computername S2 -scriptblock {get-job} Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 4 Job4 Running True localhost get-eventlog system Descrizione ----------- In questo esempio viene dimostrato che il cmdlet Get-Job può ottenere tutti i processi avviati nella sessione corrente, anche se sono stati avviati tramite metodi diversi. Nel primo comando viene utilizzato il cmdlet Start-Job per avviare un processo nel computer locale. Nel secondo comando viene utilizzato il parametro AsJob di Invoke-Command per avviare un processo nel computer S1. Anche se i comandi del processo vengono eseguiti nel computer remoto, l'oggetto processo viene creato nel computer locale, in modo da poter utilizzare i comandi locali per gestire il processo. Nel terzo comando viene utilizzato il cmdlet Invoke-Command per eseguire un comando Start-Job nel computer S2. Con questo metodo, l'oggetto processo viene creato nel computer locale, in modo da poter utilizzare i comandi remoti per gestire il processo. Nel quarto comando viene utilizzato Get-Job per ottenere i processi archiviati nel computer locale. Nel quinto comando viene utilizzato Invoke-Command per eseguire un comando Get-Job nel computer S2. Nell'output di esempio vengono indicati i risultati dei comandi Get-Job. Per ulteriori informazioni sull'esecuzione dei processi in background in computer remoti, vedere about_Remote_Jobs.
Esempio 9
C:\PS>start-job -scriptblock {get-process} Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 1 Job1 Failed False localhost get-process C:\PS> (get-job).jobstateinfo | format-list -property * State : Failed Reason : C:\PS> get-job | format-list * HasMoreData : False StatusMessage : Location : localhost Command : get-process JobStateInfo : Failed Finished : System.Threading.ManualResetEvent InstanceId : fb792295-1318-4f5d-8ac8-8a89c5261507 Id : 1 Name : Job1 ChildJobs : {Job2} Output : {} Error : {} Progress : {} Verbose : {} Debug : {} Warning : {} StateChanged : C:\PS> (get-job -name job2).jobstateinfo.reason Connecting to remote server using WSManCreateShellEx api failed. The async callback gave the following error message : Access is denied. Descrizione ----------- Tramite questo comando viene illustrato come utilizzare l'oggetto processo restituito da Get-Job per analizzare la causa dell'esito negativo di un processo. Viene inoltre illustrato come ottenere i processi figlio di ciascun processo. Nel primo comando viene utilizzato il cmdlet Start-Job per avviare un processo nel computer locale. L'oggetto processo restituito da Start-Job indica che il processo non è riuscito. Il valore della proprietà State è "Failed". Nel secondo comando viene utilizzato Get-Job per ottenere l'oggetto processo. Viene utilizzato il metodo con punto per ottenere il valore della proprietà JobStateInfo dell'oggetto. Viene utilizzato un operatore pipeline per inviare l'oggetto nella proprietà JobStateInfo al cmdlet Format-List che formatta tutte le proprietà dell'oggetto (*) in un elenco. Il risultato del comando Format-List indica che il valore della proprietà Reason del processo è vuoto. Nel terzo comando viene eseguita un'ulteriore analisi. Viene utilizzato un comando Get-Job per ottenere il processo, quindi si utilizza un operatore pipeline per inviare l'intero oggetto processo al cmdlet Format-List, in cui vengono visualizzate tutte le proprietà del processo in un elenco. La visualizzazione di tutte le proprietà nell'oggetto processo indica che il processo contiene un processo figlio denominato "Job2." Nel quarto comando viene utilizzato Get-Job per ottenere l'oggetto processo che rappresenta il processo figlio Job2. Si tratta del processo in cui viene eseguito effettivamente il comando. Viene utilizzato il metodo con punto per ottenere la proprietà Reason della proprietà JobStateInfo. Il risultato indica che il processo non è riuscito a causa di un errore di "accesso negato". In questo caso, l'utente ha dimenticato di utilizzare l'opzione "Esegui come amministratore" al momento dell'apertura di Windows PowerShell. Poiché nei processi in background vengono utilizzate le funzionalità di comunicazione remota di Windows PowerShell, è necessario configurare il computer affinché la comunicazione remota esegua un processo, anche quando il processo viene eseguito nel computer locale. Per informazioni sui requisiti per la comunicazione remota in Windows PowerShell, vedere about_Remote_Requirements. Per suggerimenti sulla risoluzione dei problemi, vedere about_Remote_Troubleshooting.
Vedere anche