Wait-Job
等待會話中執行的一個或所有 PowerShell 工作進入終止狀態。
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>]
Wait-Job
Cmdlet 會先等候作業處於終止狀態,然後再繼續執行。
終止狀態為:
- 完成
- 失敗
- 停止
- 暫停
- 中斷連接
您可以等到指定的作業,或所有作業都處於終止狀態。 您也可以使用 Timeout 參數來設定作業的等候時間上限,或使用 Force 參數,在 Suspended
或 Disconnected
狀態中等候作業。
當作業中的命令完成時,Wait-Job
會傳回作業對象並繼續執行。
您可以使用 Wait-Job
Cmdlet 來等候由 Start-Job
Cmdlet 或 Cmdlet 的 Invoke-Command
參數啟動的工作。 如需工作的詳細資訊,請參閱 about_Jobs。
從 Windows PowerShell 3.0 開始,Wait-Job
Cmdlet 也會等候自定義作業類型,例如工作流程作業和排程工作的實例。 若要讓 Wait-Job
等候特定類型的作業,請在執行 Get-Job
Cmdlet 之前,先將支援自定義作業類型的模組匯入會話,方法是使用 Import-Module
Cmdlet 或使用 或取得模組中的 Cmdlet。 如需特定自定義作業類型的相關信息,請參閱自定義作業類型功能的檔。
Get-Job | Wait-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
此範例示範如何使用 Wait-Job
Cmdlet 搭配使用 Start-Job
Cmdlet 在遠端電腦上啟動的工作。
Start-Job
和 Wait-Job
命令都會使用 Invoke-Command
Cmdlet 提交至遠端電腦。
此範例會使用 Wait-Job
來判斷在三部不同計算機上以作業身分執行的 Get-Date
命令是否已完成。
第一個命令會在三部遠端計算機上建立 Windows PowerShell 工作階段(PSSession),並將其儲存在 $s
變數中。
第二個命令會在 Invoke-Command
的三個會話中使用 Start-Job
執行 $s
。
所有工作都命名為 Date1。
第三個命令會使用 Invoke-Command
來執行 Wait-Job
。 此命令會等候每部電腦上的 Date1
作業完成。 它會將 作業 對象的結果集合(陣列)儲存在 $done
變數中。
第四個命令會使用 變數中作業物件陣列的 $done
屬性,來判斷作業的完成數目。
$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}
這個範例會使用 的 Wait-Job
參數來判斷目前會話中執行之許多作業的第一個是否處於終止狀態。 它也會示範如何使用 Wait-Job
Cmdlet 等待遠端作業完成。
第一個命令會在 Machines.txt 檔案中列出的每部計算機上建立 PSSession,並將 PSSession 物件儲存在 $s
變數中。 命令會使用 Get-Content
Cmdlet 來取得檔案的內容。
Get-Content
命令會以括弧括住,以確保它在 New-PSSession
命令之前執行。
第二個命令會將 Get-EventLog
命令字串以引號儲存在 $c
變數中。
第三個命令會使用 Invoke-Command
Cmdlet,在 Start-Job
的每個會話中執行 $s
。
Start-Job
命令會啟動在 Get-EventLog
變數中執行 $c
命令的作業。
命令會使用 Using 範圍修改器,表明本機計算機上已定義 $c
變數。
使用 範圍修飾詞是在 Windows PowerShell 3.0 中引進的。 如需有關 使用 範圍修飾詞的詳細資訊,請參閱 about_Remote_Variables。
第四個命令會使用 Invoke-Command
命令來在會話中執行 Wait-Job
命令。 它會使用參數 Any,等待遠端電腦上的第一個作業進入終止狀態。
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>
此範例示範如何使用 的 Wait-Job
參數,為遠端電腦上執行的作業設定最長等候時間。
第一個命令會在三部遠端計算機上建立 PSSession(Server01、Server02 和 Server03),然後將 PSSession 物件儲存在 $s
變數中。
第二個命令會使用 Invoke-Command
在 Start-Job
中的每個 PSSession 物件中執行 $s
。 它會將產生的作業物件儲存在 $jobs
變數中。
第三個命令會使用 Invoke-Command
在 Wait-Job
的每個會話中執行 $s
。
Wait-Job
命令會判斷所有命令是否在30秒內完成。 它會使用值為 30 的 Timeout 參數來建立等候時間上限,然後將命令的結果儲存在 $done
變數中。
在此情況下,在 30 秒之後,只有 Server02 計算機上的命令已完成。
Wait-Job
結束等候,傳回 物件,代表已完成的工作,並顯示命令提示字元。
$done
變數包含代表 Server02 上執行之作業的作業物件。
Wait-Job -id 1, 2, 5 -Any
此命令會依標識碼識別三個作業,並等到其中任何一個作業處於終止狀態為止。 當第一個作業完成時,執行會繼續。
Wait-Job -Name "DailyLog" -Timeout 120
此命令會等候 120 秒(兩分鐘)讓 DailyLog 作業完成。 如果作業在接下來的兩分鐘內未完成,則執行會繼續,而作業會繼續在背景中執行。
Wait-Job -Name "Job3"
此命令會使用作業名稱來識別要等候的作業。
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1 | Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
此範例示範如何使用 Wait-Job
Cmdlet 搭配使用 Start-Job
在本機計算機上啟動的工作。
這些命令會啟動作業,以取得上周新增或更新的 Windows PowerShell 腳本檔案。
第一個指令使用 Start-Job
在本機電腦上啟動工作。 任務會執行 Get-ChildItem
命令,以取得在上周新增或更新的所有副檔名為 .ps1 的檔案。
第三個命令會使用 Wait-Job
等待作業達到終止狀態。 當作業完成時,命令會顯示作業物件,其中包含作業的相關信息。
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
此範例示範如何使用 Wait-Job
的 AsJob 參數,將 Invoke-Command
與在遠端電腦上啟動的工作一起使用。 使用 AsJob時,作業會在本機電腦上建立,而且即使作業在遠端電腦上執行,結果也會自動傳回至本機計算機。
此範例會使用 Wait-Job
來判斷在三部遠端電腦上會話中執行的 Get-Process
命令是否處於終止狀態。
第一個命令會在三部計算機上建立 PSSession 物件,並將其儲存在 $s
變數中。
第二個命令會在 Invoke-Command
的三個會話中使用 Get-Process
執行 $s
。
此命令會使用 AsJob 參數,以異步方式執行命令作為作業。 此命令會傳回作業物件,就像使用 Start-Job
啟動的作業一樣,而作業物件會儲存在 $j
變數中。
第三個命令會使用管線運算符 (|
) 將作業物件 $j
傳送至 Wait-Job
Cmdlet。 在此情況下,不需要 Invoke-Command
命令,因為作業位於本機計算機上。
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
此命令會等候 ID 值為 1 的作業。
表示此 Cmdlet 會傳回作業物件,並在任何作業完成時繼續執行。 根據預設,Wait-Job
等到所有指定的作業都完成,再顯示提示。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
指定條件的哈希表。 此 Cmdlet 會等候符合哈希表中所有條件的工作。 輸入哈希表,其中索引鍵是作業屬性,而值是作業屬性值。
此參數僅適用於自定義作業類型,例如工作流程作業和排程工作。 它不適用於標準作業,例如使用 Start-Job
Cmdlet 所建立的工作。 如需此參數支援的相關信息,請參閱作業類型的說明主題。
此參數是在 Windows PowerShell 3.0 中引進的。
類型: | Hashtable |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
表示此 Cmdlet 會繼續等候處於「已暫停」或「已中斷連線」狀態的工作。 根據預設,當作業處於下列其中一種狀態時,Wait-Job
會傳回或結束等候:
- 完成
- 失敗
- 停止
- 暫停
- 中斷連接
此參數是在 Windows PowerShell 3.0 中引進的。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
指定此 Cmdlet 等候的作業識別碼陣列。
識別碼是整數,能夠唯一識別目前會話中的任務。 比實例 ID 更容易記住和輸入,但只在當前會話中是唯一的。 您可以輸入一或多個識別碼,並以逗號分隔。 若要尋找作業的識別碼,請輸入 Get-Job
。
類型: | Int32[] |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
指定此 Cmdlet 等候之作業實例識別碼的陣列。 預設值為所有工作。
實例標識碼是可唯一識別計算機上作業的 GUID。 若要尋找作業的實體識別碼,請使用 Get-Job
。
類型: | Guid[] |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
指定此 Cmdlet 等候的作業。 輸入包含作業物件的變數,或取得作業物件的命令。 您也可以使用管線運算符將作業物件傳送至 Wait-Job
Cmdlet。 根據預設,Wait-Job
等候目前會話中建立的所有作業。
類型: | Job[] |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
指定此 Cmdlet 等候的作業的友善名稱。
類型: | String[] |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
指定作業狀態。 此 Cmdlet 只會等候處於指定狀態的工作。 此參數可接受的值為:
- 未開始
- 跑步
- 完成
- 失敗
- 停止
- 封鎖
- 暫停
- 中斷連接
- 暫停
- 停止
如需作業狀態的詳細資訊,請參閱 JobState 列舉。
類型: | JobState |
接受的值: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
指定每個作業的等候時間上限,以秒為單位。 默認值 -1 表示 Cmdlet 會等到作業完成為止。 當您提交 Wait-Job
命令,而不是 Start-Job
命令時,時間就會開始。
如果超過這個時間,則等候結束並執行繼續,即使作業仍在運行。 命令不會顯示任何錯誤訊息。
類型: | Int32 |
別名: | TimeoutSec |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
System.Management.Automation.RemotingJob
您可以使用管線將作業物件傳送到此 Cmdlet。
System.Management.Automation.PSRemotingJob
此 Cmdlet 會傳回工作對象,這些物件代表處於終止狀態的作業。 如果等候是因為超出 Timeout 參數的值而結束,Wait-Job
不會傳回任何物件。
PowerShell 包含下列 Wait-Job
別名:
- 所有平臺:
wjb
根據預設,當作業處於下列其中一種狀態時,Wait-Job
會傳回或結束等候:
- 完成
- 失敗
- 停止
- 暫停
- 中斷連接
若要指示 Wait-Job
繼續等待已暫停和已中斷的作業,請使用 Force 參數。