Wait-Job
Attende che uno o tutti i processi di PowerShell in esecuzione nella sessione non siano in uno stato di terminazione.
Sintassi
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Id] <Int32[]>
[<CommonParameters>]
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Name] <String[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-State] <JobState>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Filter] <Hashtable>
[<CommonParameters>]
Descrizione
Il Wait-Job
cmdlet attende che un processo si trovi in uno stato di terminazione prima di continuare l'esecuzione.
Gli stati di terminazione sono:
- Completato
- Non riuscito
- Arrestato
- Suspended
- Disconnesso
È possibile attendere fino a quando un processo specificato o tutti i processi si trovano in uno stato di terminazione. È anche possibile impostare un tempo di attesa massimo per il processo usando il parametro Timeout oppure usare il parametro Force per attendere un processo negli Suspended
stati o Disconnected
.
Al termine dei comandi del processo, Wait-Job
restituisce un oggetto processo e continua l'esecuzione.
È possibile usare il Wait-Job
cmdlet per attendere l'avvio dei processi usando il Start-Job
cmdlet o il parametro AsJob del Invoke-Command
cmdlet . Per altre informazioni sui processi, vedere about_Jobs.
A partire da Windows PowerShell 3.0, il Wait-Job
cmdlet attende anche i tipi di processi personalizzati, ad esempio processi del flusso di lavoro e istanze dei processi pianificati. Per consentire Wait-Job
l'attesa di processi di un particolare tipo, importare il modulo che supporta il tipo di processo personalizzato nella sessione prima di eseguire il Get-Job
cmdlet, usando il Import-Module
cmdlet o usando o ottenendo un cmdlet nel modulo. Per informazioni su un tipo di processo personalizzato particolare, vedere la documentazione relativa alla funzionalità del tipo di processo personalizzato.
Esempio
Esempio 1: Attendere tutti i processi
Get-Job | Wait-Job
Questo comando attende il completamento di tutti i processi in esecuzione nella sessione.
Esempio 2: Attendere l'avvio dei processi nei computer remoti usando Start-Job
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
3
In questo esempio viene illustrato come usare il cmdlet con i Wait-Job
processi avviati nei computer remoti usando il Start-Job
cmdlet . Entrambi Start-Job
i comandi e Wait-Job
vengono inviati al computer remoto usando il Invoke-Command
cmdlet .
In questo esempio viene Wait-Job
usato per determinare se un Get-Date
comando in esecuzione come processo in tre computer diversi è terminato.
Il primo comando crea una sessione di Windows PowerShell (PSSession) in ognuno dei tre computer remoti e li archivia nella $s
variabile .
Il secondo comando usa Invoke-Command
per l'esecuzione Start-Job
in ognuna delle tre sessioni in $s
.
Tutti i processi sono denominati Date1.
Il terzo comando usa Invoke-Command
per eseguire Wait-Job
. Questo comando attende il completamento dei Date1
processi in ogni computer. Archivia la raccolta risultante (matrice) di oggetti processo nella $done
variabile .
Il quarto comando usa la proprietà Count della matrice di oggetti processo nella $done
variabile per determinare il numero di processi completati.
Esempio 3: Determinare quando termina il primo processo
$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
In questo esempio viene utilizzato il parametro Any di Wait-Job
per determinare quando il primo di molti processi in esecuzione nella sessione corrente si trova in uno stato di terminazione. Viene inoltre illustrato come usare il cmdlet per attendere il Wait-Job
completamento dei processi remoti.
Il primo comando crea una sessione PSSession in ognuno dei computer elencati nel file Machines.txt e archivia gli oggetti PSSession nella $s
variabile. Il comando usa il Get-Content
cmdlet per ottenere il contenuto del file. Il Get-Content
comando è racchiuso tra parentesi per assicurarsi che venga eseguito prima del New-PSSession
comando.
Il secondo comando archivia una Get-EventLog
stringa di comando, tra virgolette, nella $c
variabile .
Il terzo comando usa il Invoke-Command
cmdlet per l'esecuzione Start-Job
in ognuna delle sessioni in $s
.
Il Start-Job
comando avvia un processo che esegue il Get-EventLog
comando nella $c
variabile .
Il comando usa il modificatore Using scope per indicare che la $c
variabile è stata definita nel computer locale. Il modificatore Using scope è stato introdotto in Windows PowerShell 3.0. Per altre informazioni sul modificatore Uso dell'ambito, vedere about_Remote_Variables.
Il quarto comando usa Invoke-Command
per eseguire un Wait-Job
comando nelle sessioni. Usa il parametro Any per attendere il primo processo nei computer remoti.
Esempio 4: Impostare un tempo di attesa per i processi nei computer remoti
PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>
In questo esempio viene illustrato come usare il parametro Timeout di Wait-Job
per impostare un tempo di attesa massimo per i processi in esecuzione nei computer remoti.
Il primo comando crea una sessione PSSession in ognuno dei tre computer remoti (Server01, Server02 e Server03) e quindi archivia gli oggetti PSSession nella $s
variabile.
Il secondo comando usa Invoke-Command
per l'esecuzione Start-Job
in ognuno degli oggetti PSSession in $s
. Archivia gli oggetti processo risultanti nella $jobs
variabile .
Il terzo comando usa Invoke-Command
per l'esecuzione Wait-Job
in ognuna delle sessioni in $s
. Il Wait-Job
comando determina se tutti i comandi sono stati completati entro 30 secondi. Usa il parametro Timeout con un valore pari a 30 per stabilire il tempo di attesa massimo e quindi archivia i risultati del comando nella $done
variabile.
In questo caso, dopo 30 secondi, solo il comando nel computer Server02 è stato completato. Wait-Job
termina l'attesa, restituisce l'oggetto che rappresenta il processo completato e visualizza il prompt dei comandi.
La $done
variabile contiene un oggetto processo che rappresenta il processo eseguito in Server02.
Esempio 5: Attendere il completamento di uno dei diversi processi
Wait-Job -id 1,2,5 -Any
Questo comando identifica tre processi in base ai relativi ID e attende fino a quando uno di essi non è in uno stato di terminazione. L'esecuzione continua al termine del primo processo.
Esempio 6: Attendere un periodo, quindi consentire al processo di continuare in background
Wait-Job -Name "DailyLog" -Timeout 120
Questo comando attende il completamento del processo DailyLog di 120 secondi (due minuti). Se il processo non viene completato nei due minuti successivi, l'esecuzione continua e il processo continua a essere eseguito in background.
Esempio 7: Attendere un processo in base al nome
Wait-Job -Name "Job3"
Questo comando usa il nome del processo per identificare il processo per il quale attendere.
Esempio 8: Attendere i processi nel computer locale avviato con Start-Job
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
In questo esempio viene illustrato come usare il cmdlet con i Wait-Job
processi avviati nel computer locale usando Start-Job
.
Questi comandi avviano un processo che ottiene i file script di Windows PowerShell aggiunti o aggiornati nell'ultima settimana.
Il primo comando usa Start-Job
per avviare un processo nel computer locale. Il processo esegue un Get-ChildItem
comando che ottiene tutti i file con estensione ps1 che sono stati aggiunti o aggiornati nell'ultima settimana.
Il terzo comando usa Wait-Job
per attendere che il processo non sia in uno stato di terminazione. Al termine del processo, il comando visualizza l'oggetto processo, che contiene informazioni sul processo.
Esempio 9: Attendere l'avvio dei processi nei computer remoti tramite Invoke-Command
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
Questo esempio illustra come usare Wait-Job
con i processi avviati nei computer remoti usando il parametro AsJob di Invoke-Command
. Quando si usa AsJob, il processo viene creato nel computer locale e i risultati vengono restituiti automaticamente al computer locale, anche se il processo viene eseguito nei computer remoti.
In questo esempio viene Wait-Job
usato per determinare se un Get-Process
comando in esecuzione nelle sessioni in tre computer remoti è in uno stato di terminazione.
Il primo comando crea oggetti PSSession in tre computer e li archivia nella $s
variabile .
Il secondo comando usa Invoke-Command
per l'esecuzione Get-Process
in ognuna delle tre sessioni in $s
.
Il comando usa il parametro AsJob per eseguire il comando in modo asincrono come processo. Il comando restituisce un oggetto processo, proprio come i processi avviati tramite Start-Job
e l'oggetto processo viene archiviato nella $j
variabile .
Il terzo comando usa un operatore pipeline (|
) per inviare l'oggetto processo al $j
Wait-Job
cmdlet . In Invoke-Command
questo caso non è necessario un comando, perché il processo risiede nel computer locale.
Esempio 10: Attendere un processo con UN ID
Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,Server01.. get-service
4 Job4 Completed True localhost dir | where
Wait-Job -Id 1
Questo comando attende il completamento del processo con ID 1.
Parametri
-Any
Indica che questo cmdlet restituisce l'oggetto processo e continua l'esecuzione al termine di qualsiasi processo. Per impostazione predefinita, Wait-Job
attende il completamento di tutti i processi specificati prima di visualizzare il prompt.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Filter
Specifica una tabella hash di condizioni. Questo cmdlet attende i processi che soddisfano tutte le condizioni nella tabella hash. Immettere una tabella hash in cui le chiavi sono le proprietà del processo e i valori sono i valori di queste proprietà.
Questo parametro funziona solo su tipi di processo personalizzati, ad esempio i processi del flusso di lavoro e i processi pianificati. Non funziona su processi standard, ad esempio quelli creati usando il Start-Job
cmdlet . Per informazioni sul supporto di questo parametro, vedere l'argomento della Guida relativo al tipo di processo.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Tipo: | Hashtable |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Force
Indica che questo cmdlet continua ad attendere i processi nello stato Suspended o Disconnected. Per impostazione predefinita, Wait-Job
restituisce o termina l'attesa, quando i processi si trovano in uno degli stati seguenti:
- Completato
- Non riuscito
- Arrestato
- Suspended
- Disconnesso
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Id
Specifica una matrice di ID di processi per cui questo cmdlet attende.
L'ID è un numero intero che identifica in modo univoco il processo nella sessione corrente. È più facile ricordare e digitare l'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
.
Tipo: | Int32[] |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-InstanceId
Specifica una matrice di ID istanza di processi per cui questo cmdlet attende. Il valore predefinito corrisponde a 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, usare Get-Job
.
Tipo: | Guid[] |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Job
Specifica i processi per i quali il cmdlet attende. Immettere una variabile che contiene gli oggetti processo o un comando che li ottiene. È anche possibile usare un operatore pipeline per inviare oggetti processo al Wait-Job
cmdlet . Per impostazione predefinita, Wait-Job
attende tutti i processi creati nella sessione corrente.
Tipo: | Job[] |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Name
Specifica i nomi descrittivi dei processi per i quali il cmdlet attende.
Tipo: | String[] |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-State
Specifica uno stato del processo. Questo cmdlet attende solo i processi nello stato specificato. I valori validi per questo parametro sono:
- NotStarted
- In esecuzione
- Completato
- Non riuscito
- Arrestato
- Bloccati
- Suspended
- Disconnesso
- Suspending
- Arresto in corso
Per altre informazioni sugli stati dei processi, vedere Enumerazione JobState.
Tipo: | JobState |
Valori accettati: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Timeout
Specifica il tempo di attesa massimo per ogni processo, espresso in secondi. Il valore predefinito , -1, indica che il cmdlet attende fino al termine del processo. L'intervallo inizia quando si invia il Wait-Job
comando, non il Start-Job
comando .
Se questo tempo viene superato, l'attesa termina e l'esecuzione continua, anche se il processo è ancora in esecuzione. Il comando non visualizza alcun messaggio di errore.
Tipo: | Int32 |
Alias: | TimeoutSec |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
System.Management.Automation.RemotingJob
È possibile inviare tramite pipe un oggetto processo a questo cmdlet.
Output
System.Management.Automation.PSRemotingJob
Questo cmdlet restituisce oggetti processo che rappresentano i processi in uno stato di terminazione. Se l'attesa termina perché viene superato il valore del parametro Timeout , Wait-Job
non restituisce alcun oggetto .
Note
Windows PowerShell include gli alias seguenti per Wait-Job
:
wjb
Per impostazione predefinita, Wait-Job
restituisce o termina l'attesa, quando i processi si trovano in uno degli stati seguenti:
- Completato
- Non riuscito
- Arrestato
- Suspended
- Disconnesso
Per continuare Wait-Job
ad attendere i processi Suspended e Disconnected, usare il parametro Force .