Get-Job
取得目前工作階段中執行的 Windows PowerShell 背景工作。
語法
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>]
描述
Get-Job Cmdlet 會取得表示在目前工作階段中啟動之背景工作的物件。您可以使用 Get-Job 取得透過 Start-Job 或透過任何 Cmdlet 的 AsJob 參數所啟動的工作。
如果未指定參數,"Get-Job" 命令會取得目前工作階段中的所有工作。您可以使用 Get-Job 的各項參數取得特定工作。
Get-Job 傳回的工作物件包含有用的工作資訊,但不包含工作結果。若要取得工作結果,請使用 Receive-Job Cmdlet。
Windows PowerShell 背景工作是「在背景中」執行、與目前工作階段沒有互動的命令。通常您會使用背景工作來執行需要長時間完成的複雜命令。如需 Windows PowerShell 中背景工作的詳細資訊,請參閱 about_Jobs。
參數
-Command <string[]>
取得包含指定之命令的工作。預設為所有工作。請以字串形式輸入命令。您可以使用萬用字元指定命令模式。
必要? |
false |
位置? |
named |
預設值 |
所有工作 |
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
true |
-Id <Int32[]>
只取得具有指定之識別碼的工作。
識別碼是整數,可唯一識別目前工作階段內的工作。雖然它比執行個體識別碼更容易記得和輸入,但是只有在目前的工作階段中才具有唯一性。您可以輸入一個或多個識別碼 (以逗號分隔)。若要尋找工作的識別碼,請輸入 "Get-Job" 且不要指定參數。
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-InstanceId <Guid[]>
取得具有指定之執行個體識別碼的工作。預設為所有工作。
執行個體識別碼是一種 GUID,它能夠唯一識別電腦上的工作。若要尋找工作的執行個體識別碼,請使用 Get-Job。
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
true |
-Name <string[]>
取得具有指定之好記名稱的工作。請輸入工作名稱,或是使用萬用字元輸入工作名稱模式。根據預設,Get-Job 會取得目前工作階段中的所有工作。
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
true |
-State <JobState>
只取得具有指定之狀態的工作。有效的值包括 NotStarted、Running、Completed、Stopped、Failed 和 Blocked。根據預設,Get-Job 會取得目前工作階段中的所有工作。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
無 您無法經由管道將輸入輸出至這個 Cmdlet。 |
輸出 |
System.Management.Automation.RemotingJob Get-Job 會傳回代表工作階段中各項工作的物件。 |
範例 1
C:\PS>get-job
描述
-----------
這個命令會取得在目前工作階段中啟動的所有背景工作,但不包含在其他工作階段中建立的工作,即使該工作在本機電腦上執行也一樣。
範例 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
描述
-----------
這些命令示範如何取得工作的執行個體識別碼,然後使用它來停止工作。不像工作名稱不具唯一性,執行個體識別碼是唯一的。
第一個命令會使用 Get-Job Cmdlet 取得工作。它會使用 Name 參數識別工作,並將 Get-Job 所傳回的工作物件儲存在 $j 變數中。在這個範例中,只有一個工作具有指定的名稱。
第二個命令會取得 $j 變數中物件的 InstanceId 屬性,並將它儲存在 $ID 變數中。
第三個命令會顯示 $ID 變數的值。
第四個命令會使用 Stop-Job Cmdlet 停止工作。它會使用 InstanceId 參數識別工作,並使用 $ID 變數表示工作的執行個體識別碼。
範例 3
C:\PS>get-job -command "*get-process*"
描述
-----------
這個命令會取得系統上包含 Get-Process 命令的工作,命令中會使用 Get-Job 的 Command 參數限制所擷取的工作。命令中使用的萬用字元 (*) 是用來取得命令字串中的任何位置包含 Get-Process 命令的工作。
範例 4
C:\PS>"*get-process*" | get-job
描述
-----------
如同上一個範例中的命令,這個命令會取得系統上包含 Get-Process 命令的工作。這個命令會使用管線運算子 (|) 將字串 (用雙引號括住) 傳送至 Get-Job Cmdlet。它的作用相當於上一個命令。
範例 5
C:\PS>get-job -state NotStarted
描述
-----------
這個命令只會取得已建立但尚未啟動的工作。這包括排程未來執行以及尚未排程的工作。
範例 6
C:\PS>get-job -name job*
描述
-----------
這個命令會取得工作名稱開頭為 "job" 的所有工作。因為 "job<number>" 是工作的預設名稱,所以這個命令會取得沒有明確指定名稱的所有工作。
範例 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
...
描述
-----------
這個範例會示範如何使用 Get-Job 取得工作物件,然後使用該物件名稱表示命令中的工作。
第一個命令會使用 Start-Job Cmdlet 啟動一個在本機電腦上執行 Get-Process 命令的背景工作。這個命令會使用 Start-Job 的 Name 參數,將好記的名稱指定給工作。
第二個命令會使用 Get-Job 取得此工作。它會使用 Get-Job 的 Name 參數識別工作,並將產生的工作物件儲存在 $j 變數中。
第三個命令會顯示 $j 變數中工作物件的值。State 屬性的值顯示此工作已完成。HasMoreData 屬性的值顯示工作有未擷取的結果。
第四個命令會使用 Receive-Job Cmdlet 取得工作結果。它會使用 $j 變數中的工作物件來表示此工作。您也可以使用管線運算子將工作物件傳送至 Receive-Job。
範例 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
描述
-----------
在這個範例中,會示範 Get-Job Cmdlet 可以取得在目前工作階段中啟動的所有工作,即使該工作是透過不同方法啟動也一樣。
第一個命令會使用 Start-Job Cmdlet,在本機電腦啟動工作。
第二個命令會使用 Invoke-Command 的 AsJob 參數,在 S1 電腦啟動工作。即使此工作中的命令是在遠端電腦執行,但仍會在本機電腦建立工作物件,因此您可以使用本機命令管理工作。
第三個命令會使用 Invoke-Command Cmdlet,在 S2 電腦執行 Start-Job 命令。透過這個方式,即可在遠端電腦建立工作物件,讓您可以使用遠端命令管理工作。
第四個命令會使用 Get-Job 取得儲存在本機電腦的工作。
第五個命令會使用 Invoke-Command,在 S2 電腦執行 Get-Job 命令。
範例輸出會顯示 Get-Job 命令的結果。
如需在遠端電腦上執行背景工作的詳細資訊,請參閱 about_Remote_Jobs。
範例 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.
描述
-----------
在這個範例中,會示範如何使用 Get-Job 傳回的工作物件,調查工作失敗原因。此外,也會示範如何取得每個工作的子工作。
第一個命令會使用 Start-Job Cmdlet,在本機電腦啟動工作。Start-Job 傳回的工作物件顯示該工作失敗。State 屬性值為 "Failed"。
第二個命令會使用 Get-Job 取得工作物件。這個命令會使用點標記法,取得物件的 JobStateInfo 屬性值。它會使用管線運算子將 JobStateInfo 屬性中的物件傳送至 Format-List Cmdlet,此 Cmdlet 會以清單格式列出此物件的所有屬性 (*)。
Format-List 命令的結果顯示此工作的 Reason 屬性值為空白。
第三個命令會進一步調查。它會使用 Get-Job 命令取得此工作,然後使用管線運算子將整個工作物件傳送至 Format-List Cmdlet,此 Cmdlet 會將此工作的所有屬性顯示在清單中。
此工作物件中顯示的所有屬性可知此工作包含名為 "Job2" 的子工作。
第四個命令會使用 Get-Job 取得表示 Job2 子工作的工作物件。這是此命令實際執行所在的工作。這個命令會使用點標記法,取得 JobStateInfo 屬性的 Reason 屬性。
結果顯示工作因為「拒絕存取」錯誤而失敗。這是因為在此例中,使用者在開啟 Windows PowerShell 時忘記使用 [以系統管理員身分執行] 選項所導致。
因為背景工作會使用 Windows PowerShell 的遠端功能,所以即使是在本機電腦執行工作,此電腦也必須設定為可供遠端執行工作。
如需 Windows PowerShell 遠端功能需求的詳細資訊,請參閱 about_Remote_Requirements。如需疑難排解提示,請參閱 about_Remote_Troubleshooting。
請參閱
概念
about_Jobs
about_Job_Details
about_remote_jobs
Start-Job
Receive-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command