Elimina il prompt dei comandi finché non vengono completati i processi in background di Windows PowerShell in esecuzione nella sessione.

Sintassi

Wait-Job [[-InstanceId] <Guid[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Job] <Job[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [[-Name] <string[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Id] <Int32[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-Any] [-Timeout <int>] [<CommonParameters>]

Descrizione

Il cmdlet Wait-Job attende il completamento dei processi in background di Windows PowerShell prima di visualizzare il prompt dei comandi. È possibile attendere fino al completamento di ogni singolo processo in background o di tutti i processi e impostare un tempo di attesa massimo per il processo.

È possibile utilizzare Wait-Job per ottenere processi in background avviati tramite Start-Job o tramite il parametro AsJob di Invoke-Command.

Quando i comandi nel processo sono completi, Wait-Job visualizza il prompt dei comandi e restituisce un oggetto processo che può essere reindirizzato a un altro comando.

Parametri

-Any

Visualizza il prompt dei comandi e restituisce l'oggetto processo al termine di un processo. Per impostazione predefinita Wait-Job attende il completamento di tutti i processi specificati prima di visualizzare il prompt.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Id <Int32[]>

Attende 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 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[]>

Attende 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?

false

-Job <Job[]>

Attende i processi specificati. Immettere una variabile che contiene gli oggetti processo oppure un comando che consente di ottenere tali oggetti. È anche possibile utilizzare un operatore pipeline per inviare gli oggetti processo al cmdlet Wait-Job. Per impostazione predefinita, Wait-Job attende tutti i processi creati nella sessione corrente.

Obbligatorio?

true

Posizione?

1

Valore predefinito

Accettare input da pipeline?

true (ByValue, ByPropertyName)

Accettare caratteri jolly?

false

-Name <string[]>

Attende i processi con i nomi descrittivi specificati.

Obbligatorio?

false

Posizione?

1

Valore predefinito

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

-State <JobState>

Attende i processi nello stato specificato. I valori validi sono NotStarted, Running, Completed, Stopped, Failed e Blocked.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

true (ByPropertyName)

Accettare caratteri jolly?

false

-Timeout <int>

Determina il tempo di attesa massimo per ogni processo in background, in secondi. Il valore predefinito -1 attende il completamento del processo, indipendentemente dalla durata dell'esecuzione. Il calcolo del tempo inizia quando si invia il comando Wait-Job e non il comando Start-Job.

Se il periodo di tempo viene superato, l'attesa si conclude e viene visualizzato il prompt dei comandi anche se il processo è ancora in esecuzione. Non viene visualizzato alcun messaggio di errore.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

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.RemotingJob

È possibile reindirizzare un oggetto processo a Wait-Job.

Output

System.Management.Automation.RemotingJob

Wait-Job restituisce oggetti processo che rappresentano i processi completati. Se l'attesa termina a causa del superamento del valore del parametro Timeout, Wait-Job non restituisce oggetti.

Esempio 1

C:\PS>get-job | wait-job

Descrizione
-----------
Questo comando attende il completamento di tutti i processi in background in esecuzione nella sessione.






Esempio 2

C:\PS>$s = new-pssession server01, server02, server03

C:\PS> invoke-command -session $s -scriptblock {start-job -name Date1 -scriptblock {get-date}}

C:\PS> $done = invoke-command -session $s -command {wait-job -name Date1}

C:\PS> $done.count
3

Descrizione
-----------
In questo esempio viene illustrato come utilizzare il cmdlet Wait-Job con processi avviati nei computer remoti tramite il cmdlet Start-Job. I comandi Start-Job e Wait-Job vengono inviati al computer remoto tramite il cmdlet Invoke-Command.

In questo esempio viene utilizzato Wait-Job per determinare se un comando Get-Date in esecuzione come processo in background in tre computer diversi è stato completato. 

Il primo comando crea una sessione di Windows PowerShell (PSSession) in ognuno dei tre computer remoti e la salva nella variabile $s. 

Il secondo comando utilizza il cmdlet Invoke-Command per eseguire un comando Start-Job in ognuna delle tre sessioni in $s. Tutti i processi sono denominati Date1.

Il terzo comando utilizza il cmdlet Invoke-Command per eseguire un comando Wait-Job. Questo comando attende il completamento dei processi Date1 in ogni computer. Archivia l'insieme risultante di oggetti processo (matrice) nella variabile $done. 

Il quarto comando utilizza la proprietà Count della matrice di oggetti processo nell variabile $done per determinare quanti processi sono stati completati.






Esempio 3

C:\PS>$s = new-pssession (get-content machines.txt)  

C:\PS> $c = 'get-eventlog -log system | where {$_.EntryType -eq "error" -and $_.Source -eq "LSASRV"} | out-file errors.txt'

C:\PS> invoke-command -session $s -scriptblock {param($c)start-job -scriptblock {$c}} -ArgumentList $c

C:\PS> invoke-command -session $s -scriptblock {wait-job -any}

Descrizione
-----------
In questo esempio viene utilizzato il parametro Any di Wait-Job per determinare quando viene completato il primo di numerosi processi in background in esecuzione nella sessione corrente. Viene inoltre illustrato come utilizzare il cmdlet Wait-Job per attendere il completamento dei processi remoti. 

Il primo comando crea una sessione PSSession in ognuno dei computer elencati nel file Machines.txt e archivia le sessioni nella variabile $s. Il comando utilizza il cmdlet Get-Content per ottenere il contenuto del file. Il comando Get-Content è racchiuso tra parentesi per garantire che venga eseguito prima del comando New-PSSession.

Il secondo comando archivia una stringa del comando Get-EventLog (tra virgolette) nella variabile $c.

Nel terzo comando viene utilizzato il cmdlet Invoke-Command per eseguire un comando Start-Job in ognuna delle sessioni di $s. Il comando Start-Job avvia un processo in background in cui viene eseguito il comando in $c. 

Poiché la variabile $c si trova nel computer locale, il comando utilizza la parola chiave "param" per dichiarare le variabili locali nel comando e il parametro ArgumentList per fornire i valori per tali variabili.

Nel quarto comando viene utilizzato il cmdlet Invoke-Command per eseguire un comando Wait-Job nelle sessioni. Viene utilizzato il cmdlet Wait-Job per attendere il completamento del primo processo nei computer remoti.






Esempio 4

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

C:\PS> $jobs = invoke-command -session $s -scriptblock {start-job -script {get-date}}

C:\PS> $done = invoke-command -session $s -scriptblock {wait-job -timeout 30}

Descrizione
-----------
In questo esempio viene illustrato come utilizzare il parametro Timeout di Wait-Job per impostare un tempo di attesa massimo per i processi in esecuzione in computer remoti. 

Il primo comando crea una sessione PSSession in ognuno dei tre computer remoti (Server01, Server02 e Server03) e salva le sessioni nella variabile $s. 

Nel secondo comando viene utilizzato il cmdlet Invoke-Command per eseguire un comando Start-Job in ognuna delle sessioni PSSession di $s. Il comando consente di salvare gli oggetti processo risultanti nella variabile $jobs.

Nel terzo comando viene utilizzato il cmdlet Invoke-Command per eseguire un comando Wait-Job in ognuna delle sessioni PSSession di $s. Il comando Wait-Job stabilisce se tutti i comandi sono stati completati entro 30 secondi. Utilizza il parametro Timeout con un valore di 30 (secondi) per stabilire il tempo di attesa massimo e salva i risultati del comando nella variabile $done. 

In questo caso, dopo 30 secondi, solo il comando nel computer Server02 è stato completato. Wait-Job interrompe l'attesa, visualizza il prompt dei comandi e restituisce l'oggetto che rappresenta il processo completato. 

La variabile $done contiene un oggetto processo che rappresenta il processo in esecuzione in Server02.






Esempio 5

C:\PS>wait-job -id 1,2,5 -any

Descrizione
-----------
Questo comando identifica tre processi tramite i relativi ID e attese il completamento di uno di essi. Al termine del primo processo, viene visualizzato il prompt dei comandi.






Esempio 6

C:\PS>wait-job -name DailyLog -timeout 120

Descrizione
-----------
Questo comando attende 120 secondi (due minuti) per il completamento del processo DailyLog. Se il processo non viene completato nei due minuti successivi, viene comunque visualizzato il prompt dei comandi e il processo continua ad essere eseguito in background.






Esempio 7

C:\PS>wait-job -name Job3

Descrizione
-----------
Questo comando Wait-Job utilizza il nome del processo per identificare il processo da attendere.






Esempio 8

C:\PS>C:\PS> $j = start-job -script {get-childitem *.ps1| where {$_lastwritetime -gt ((get-date) - (new-timespan -days 7))}}

C:\PS> $j | wait-job

Descrizione
-----------
In questo esempio viene illustrato come utilizzare il cmdlet Wait-Job con processi avviati nel computer locale tramite il cmdlet Start-Job.

Questi comandi avviano un processo che ottiene i file script di Windows PowerShell aggiunti o aggiornati nell'ultima settimana.

Nel primo comando viene utilizzato il cmdlet Start-Job per avviare un processo in background nel computer locale. Il processo esegue un comando Get-ChildItem che ottiene tutti i file con estensione ".ps1" aggiunti o aggiornati nell'ultima settimana.

Il terzo comando utilizza il cmdlet Wait-Job per attendere il completamento del processo. Al termine del processo, viene visualizzato l'oggetto processo che contiene informazioni sul processo.






Esempio 9

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

C:\PS> $j = invoke-command -session $s -scriptblock {get-process} -asjob

C:\PS> $j | wait-job

Descrizione
-----------
In questo esempio viene illustrato come utilizzare il cmdlet Wait-Job con processi avviati nei computer remoti tramite il parametro AsJob del cmdlet Invoke-Command. Quando si utilizza AsJob, il processo viene creato nel computer locale e i risultati vengono automaticamente restituiti in tale computer, anche se il processo viene eseguito nei computer remoti.

In questo esempio viene utilizzato Wait-Job per determinare se un comando Get-Process in esecuzione nelle sessioni in tre computer remoti è stato completato. 

Il primo comando crea sessioni PSSession nei tre computer e le salva nella variabile $s. 

Il secondo comando utilizza il cmdlet Invoke-Command per eseguire un comando Get-Process in ognuna delle tre sessioni PSSession in $s. Viene utilizzato il parametro AsJob per eseguire il comando in modo asincrono come processo in background. Il comando restituisce un oggetto processo, esattamente come i processi avviati tramite Start-Job e tale oggetto processo viene archiviato nella variabile $j.

Il terzo comando utilizza un operatore pipeline (|) per inviare l'oggetto processo in $j al cmdlet Wait-Job. Si noti che in questo caso non è richiesto un comando Invoke-Command, poiché il processo si trova nel computer locale.






Esempio 10

C:\PS>get-job

Id   Name     State      HasMoreData     Location             Command
--   ----     -----      -----------     --------             -------
1    Job1     Completed  True            localhost,server01.. get-service
4    Job4     Completed  True            localhost            dir | where

C:\PS> wait-job -id 1

Descrizione
-----------
Questo comando attende il processo con un valore ID pari a 1.






Vedere anche




Argomenti della Guida