取得目前工作階段中執行的 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

預設值

All jobs

接受管線輸入?

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。






請參閱




目錄