Wait-Job
等待到會話中執行的一個或全部 PowerShell 工作都處於終止狀態。
語法
SessionIdParameterSet (預設值)
Wait-Job
[-Id] <Int32[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
JobParameterSet
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
NameParameterSet
Wait-Job
[-Name] <String[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
InstanceIdParameterSet
Wait-Job
[-InstanceId] <Guid[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
StateParameterSet
Wait-Job
[-State] <JobState>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
FilterParameterSet
Wait-Job
[-Filter] <Hashtable>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Description
Wait-Job指令小子會等待工作處於終止狀態後,才繼續執行。
終止狀態如下:
- 已完成
- 失敗
- 已停止
- 已暫停
- 已中斷連線
你可以等到指定工作,或所有工作都處於終止狀態。 你也可以用 Timeout 參數設定工作的最大等待時間,或用 Force 參數在 or Disconnected 狀態中等待工作Suspended。
當工作中的指令完成後,會 Wait-Job 回傳一個工作物件並繼續執行。
你可以用 Wait-Job cmdlet 或 AsJob 參數Invoke-Command來等待開始Start-Job的工作。 欲了解更多工作資訊,請參見 about_Jobs。
從 PowerShell 3.0 Windows開始,Wait-Job cmdlet 也會等待自訂工作類型,例如工作流程工作和排程工作實例。 為了讓它能 Wait-Job 等待特定類型的工作,請在執行 Get-Job cmdlet 前,將支援該自訂工作類型的模組匯入會話中,無論是使用 Import-Module cmdlet 或在模組中使用或取得 cmdlet。 關於特定自訂工作類型的資訊,請參閱該自訂工作類型功能的說明文件。
範例
範例一:等待所有工作
Get-Job | Wait-Job
此指令會等待會話中所有執行的工作完成。
範例 2:透過 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
這個範例展示了如何利用 cmdlet 來 Wait-Job 處理遠端 Start-Job 電腦上啟動的工作。
Start-Job
Wait-Job與指令皆透過指令Invoke-Command長(cmdlet)提交至遠端電腦。
此範例用 Wait-Job 來判斷在三台不同電腦上執行的指令是否 Get-Date 已完成。
第一個指令會在三台遠端電腦上建立一個 Windows PowerShell 會話(PSSession),並將它們儲存在 $s 變數中。
第二個指令則使用 Invoke-Command 在 中的$s三個會話中執行Start-Job。
所有職缺都名為Date1。
第三個指令用於 Invoke-Command 執行 Wait-Job。 此指令會等待每台電腦的工作 Date1 完成。 它會將產生的作業物件集合(陣列)儲存在變數中$done。
第四個指令利用變數中$done工作物件陣列的 Count 屬性來決定完成了多少工作。
範例三:確定第一個工作何時完成
$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}
此範例使用 AnyWait-Job 參數來判斷當前會話中第一個工作中第一個處於終止狀態。 它也展示了如何使用 Wait-Job cmdlet 等待遠端工作完成。
第一個指令會在 Machines.txt 檔案中列出的每台電腦上建立一個 PSSession ,並將 PSSession 物件儲存在變數中 $s 。 指令使用 Get-Content cmdlet 來取得檔案內容。
Get-Content 命令會以括弧括住,以確保它在 New-PSSession 命令之前執行。
第二個指令在變數中儲存一個 Get-EventLog 以引號 $c 為標的指令字串。
第三個指令使用 Invoke-Command cmdlet 在 中的$s每個 session 執行Start-Job。
指令啟動Start-Job一個工作,並在變數中$c執行該Get-EventLog指令。
指令使用 Using: scope 修飾符表示變 $c 數是在本地電腦上定義的。
Using: 範圍修飾符是在 PowerShell 3.0 中引入Windows。 如需有關範圍修飾詞的詳細資訊Using:,請參閱about_Remote_Variables。
第四個指令用於 Invoke-Command 在會話中執行指令 Wait-Job 。 它使用 Any 參數等待遠端電腦上的第一個工作達到終止狀態。
範例 4:為遠端電腦上的作業設定等待時間
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-JobTimeout 參數來設定遠端電腦上執行的工作的最大等待時間。
第一個指令會在三台遠端電腦(Server01、Server02 和 Server03)各自建立一個 PSSession ,然後將 PSSession 物件儲存在變數中 $s 。
第二個指令用於Invoke-Command執行 Start-Job 中的每個 PSSession 物件。$s 它會將產生的工作物件儲存在變數中 $jobs 。
第三個指令 在 Invoke-Command 中的每個會話$s中執行Wait-Job。 指令判斷 Wait-Job 所有指令是否在30秒內完成。 它使用值為 30 的 超時 參數來設定最大等待時間,然後將指令結果儲存在變數中 $done 。
在這種情況下,30 秒後,只有 Server02 電腦上的指令完成。
Wait-Job 結束等待,回傳代表已完成工作的物件,並顯示命令提示字元。
這個 $done 變數包含一個工作物件,代表在 Server02 上執行的工作。
範例五:等到幾個工作其中一個完成
Wait-Job -Id 1,2,5 -Any
此指令會依據 ID 識別三個工作,並等待其中任一處於終止狀態。 第一個工作完成後,執行會繼續進行。
範例 6:等待一段時間,然後讓工作在背景繼續
Wait-Job -Name "DailyLog" -Timeout 120
此指令會等待 120 秒(兩分鐘)以完成 DailyLog 工作。 如果工作在接下來兩分鐘內沒有完成,執行會繼續,工作也會在背景中繼續執行。
範例7:用名字等待工作
Wait-Job -Name "Job3"
此指令使用工作名稱來識別等待的工作。
範例 8:在以 Start-Job 開頭的本地電腦等待工作
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
此範例展示了如何使用 Wait-Job 指令碼,並透過使用 Start-Job。
這些指令會啟動一個工作,取得過去一週新增或更新的 Windows PowerShell 腳本檔案。
第一個指令用於 Start-Job 在本地電腦上啟動一個工作。 這個工作會執行 Get-ChildItem 一個指令,取得過去一週內新增或更新的副檔名檔案 .ps1 。
第三個指令則用 Wait-Job 來等待工作處於終止狀態。 當工作結束後,指令會顯示工作物件,其中包含關於該工作的資訊。
範例 9:透過 Invoke-Command 等待遠端電腦開始的工作
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
此範例展示了如何利用遠端電腦啟動的工作,透過 的 AsJob 參數Invoke-Command來使用 Wait-Job 。 使用 AsJob 時,工作會在本地電腦上建立,結果會自動回傳到本地電腦,儘管該工作是在遠端電腦上執行。
此範例用 Wait-Job 來判斷在三台遠端電腦會話中執行的 Get-Process 指令是否處於終止狀態。
第一個指令會在三台電腦上建立 PSSession 物件,並將其儲存在變數中 $s 。
第二個指令則使用 Invoke-Command 在 中的$s三個會話中執行Get-Process。
指令使用 AsJob 參數,將命令非同步執行為工作。 指令回傳一個工作物件,就像使用 Start-Job, 開始的工作一樣,且工作物件會儲存在變數中 $j 。
第三個指令使用管線運算子(|)將工作物件傳送到 $jWait-Job cmdlet。 此時不需要指令 Invoke-Command ,因為工作存在於本地電腦上。
範例 10:等待有 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
此指令等待 ID 值為 1 的工作。
參數
-Any
表示此指令子回傳工作物件,並在任何工作結束時繼續執行。 預設情況下, Wait-Job 會等到所有指定工作都完成後才會顯示提示。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Filter
指定條件雜湊表。 此指令檔會等待滿足雜湊表中所有條件的工作。 輸入一個雜湊表,鍵為工作屬性,值為工作屬性值。
此參數僅適用於自訂工作類型,如工作流程工作與排程工作。 它無法用於標準工作,例如使用 Start-Job 指令長所建立的工作。 關於此參數的支援資訊,請參閱工作類型的說明主題。
此參數是在 Windows PowerShell 3.0 中引進的。
參數屬性
| 類型: | Hashtable |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilterParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-Force
表示此指令長程式在暫停或斷線狀態下持續等待工作。 預設情況下, Wait-Job 當工作處於以下任一狀態時,會回傳或結束等待:
- 已完成
- 失敗
- 已停止
- 已暫停
- 已中斷連線
此參數是在 Windows PowerShell 3.0 中引進的。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Id
指定一個工作 ID 陣列,該指令本等待這些工作。
ID 是一個整數,唯一識別當前工作階段的工作。 它比實例 ID 更容易記憶和輸入,但它只在當前會話中唯一。 你可以輸入一個或多個ID,並以逗號分隔。 要找到職缺的 ID,請輸入 Get-Job。
參數屬性
| 類型: | Int32[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
SessionIdParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-InstanceId
指定一個工作實例 ID 陣列,該 cmdlet 會等待這些工作。 預設是全部工作。
實例 ID 是一個 GUID,唯一識別電腦上的工作。 要找到作業的實例 ID,請使用 Get-Job。
參數屬性
| 類型: | Guid[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
InstanceIdParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-Job
指定該指令匣等待的工作。 輸入包含工作物件的變數,或輸入取得工作物件的指令。 你也可以用管線運算子把工作物件傳送到 Wait-Job cmdlet。 預設情況下, Wait-Job 會等待目前會話中所有產生的工作。
參數屬性
| 類型: | Job[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
JobParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-Name
指定該指令長等待的親切工作名稱。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
NameParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-State
指定工作狀態。 此指令只等待指定狀態下的任務。 此參數可接受的值為:
- 尚未開始
- Running
- 已完成
- 失敗
- 已停止
- 已封鎖
- 已暫停
- 已中斷連線
- 暫停中
- 停止中
欲了解更多就業狀態資訊,請參閱 JobState Enumeration。
參數屬性
| 類型: | JobState |
| 預設值: | None |
| 接受的值: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
StateParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-Timeout
指定每個工作的最大等待時間,單位為秒。 預設值 -1 表示指令長子會等待工作完成。 時間點是從你提交 Wait-Job 指令開始,而不是指令本身 Start-Job 。
若超過此時間,等待結束並繼續執行,即使工作仍在執行中。 該指令不會顯示任何錯誤訊息。
參數屬性
| 類型: | Int32 |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | TimeoutSec |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
System.Management.Automation.RemotingJob
你可以把工作物件管線到這個 cmdlet。
輸出
System.Management.Automation.PSRemotingJob
此指令檔回傳代表處於終止狀態的工作物件。 若等待結束因逾 時 參數值超過, Wait-Job 則不會回傳任何物件。
備註
PowerShell 包含下列 Wait-Job的別名:
- 所有平臺:
wjb
預設情況下, Wait-Job 當工作處於以下任一狀態時,會回傳或結束等待:
- 已完成
- 失敗
- 已停止
- 已暫停
- 已中斷連線
若要指示 Wait-Job 繼續等待暫停和斷線工作,請使用 力 度參數。