Stop-Job
停止 Windows PowerShell 背景工作。
語法
Stop-Job [[-InstanceId] <Guid[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
Stop-Job [-Job] <Job[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
Stop-Job [[-Name] <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
Stop-Job [-Id] <Int32[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
Stop-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
描述
Stop-Job Cmdlet 會停止正在進行的 Windows PowerShell 背景工作。您可以使用這個 Cmdlet 停止所有工作,或是依據工作的名稱、識別碼、執行個體識別碼或狀態,或者將工作物件傳遞到 Stop-Job,以便停止選取的工作。
您可以使用 Stop-Job 停止透過 Start-Job 或透過 Invoke-Command 的 AsJob 參數所啟動的工作。停止背景工作時,Windows PowerShell 會完成擱置在該工作佇列中的所有工作,然後再結束該項工作。提交此命令之後,佇列中便不會新增任何工作。
此 Cmdlet 無法刪除背景工作。若要刪除工作,請使用 Remove-Job。
參數
-Id <Int32[]>
停止具有指定之識別碼的工作。預設為目前工作階段中的所有工作。
識別碼是整數,可唯一識別目前工作階段內的工作。它比 InstanceId 更容易記得和輸入,但是只有在目前的工作階段中才具有唯一性。您可以輸入一個或多個識別碼 (以逗號分隔)。若要尋找工作的識別碼,請輸入 "Get-Job" 且不要指定參數。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-InstanceId <Guid[]>
只停止具有指定之執行個體識別碼的工作。預設為所有工作。
執行個體識別碼是一種 GUID,它能夠唯一識別電腦上的工作。若要尋找工作的執行個體識別碼,請使用 Get-Job。
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-Job <Job[]>
指定要停止的工作。請輸入包含工作的變數或可取得工作的命令。您也可以使用管線運算子將工作提交給 Stop-Job Cmdlet。根據預設,Stop-Job 會刪除目前工作階段中已經啟動的所有工作。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByValue, ByPropertyName) |
接受萬用字元? |
false |
-Name <string[]>
只停止具有指定之好記名稱的工作。請以逗號分隔的方式輸入工作名稱清單,或是使用萬用字元 (*) 輸入工作名稱模式。根據預設,Stop-Job 會停止目前工作階段中建立的所有工作。
由於無法保證好記名稱不會重複,因此在依名稱停止工作時,請使用 WhatIf 和 Confirm 參數。
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
true |
-PassThru
傳回表示新背景工作的物件。根據預設,此 Cmdlet 不會產生任何輸出。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-State <JobState>
只停止處於指定之狀態的工作。有效的值包括 NotStarted、Running、Completed、Stopped、Failed 和 Blocked。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-Confirm
在執行命令前先提示確認。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-WhatIf
說明執行命令時將會發生何種情況,但不會實際執行命令。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
System.Management.Automation.RemotingJob 您可以經由管道將工作物件輸出至 Stop-Job。 |
輸出 |
無或 System.Management.Automation.RemotingJob 當您使用 PassThru 參數時,Stop-Job 會傳回工作物件。否則,這個 Cmdlet 不會產生任何輸出。 |
範例 1
C:\PS>$s = new-pssession -computername Server01 -credential domain01\admin02
C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}
C:\PS> invoke-command -session $s -scriptblock {param($j) stop-job -job $j} -ArgumentList $j
描述
-----------
在這個範例中,會示範如何使用 Stop-Job Cmdlet 停止正在遠端電腦執行的工作。
因為該工作是使用 Invoke-Command 在遠端執行 Start-Job 命令來啟動,所以工作物件會儲存在遠端電腦,而且您必須使用另一個 Invoke-Command 命令在遠端執行 Stop-Job 命令。如需遠端背景工作的詳細資訊,請參閱 about_Remote_Jobs。
第一個命令會在 Server01 電腦建立 Windows PowerShell 工作階段 (PSSession),並將此工作階段物件儲存在 $s 變數中。這個命令會使用網域系統管理員的認證。
第二個命令會使用 Invoke-Command Cmdlet 在工作階段中執行 Start-Job 命令。工作中的命令會取得系統事件記錄檔中的所有事件。產生的工作物件會儲存在 $j 變數中。
第三個命令會停止工作。它會使用 Invoke-Command Cmdlet,在 Server01 的 PSSession 中執行 Stop-Job 命令。因為工作物件儲存在本機電腦上的變數 $j 中,所以命令會使用 "param" 關鍵字在命令中宣告區域變數,並使用 ArgumentList 參數來提供變數的值。
當此命令執行完成時,雖然工作會停止,但是 $s 中的 PSSession 仍然可供使用。
範例 2
C:\PS>stop-job -state failed
描述
-----------
這個命令會停止 State 值為 "Failed" 的所有工作。
範例 3
C:\PS>stop-job -name job1
描述
-----------
這個命令會停止 Job1 背景工作。
範例 4
C:\PS>stop-job -id 1, 3, 4
描述
-----------
這個命令會停止三個工作。它是依識別碼來識別這些工作。
範例 5
C:\PS>get-job | stop-job
描述
-----------
這個命令會停止目前工作階段中的所有背景工作。
範例 6
C:\PS>stop-job -state blocked
描述
-----------
這個命令會停止工作狀態為 "Blocked" 的所有工作。
範例 7
C:\PS>get-job | format-table ID, Name, Command, @{Label="State";Expression={$_.jobstateinfo.state}}, I
nstanceID -auto
Id Name Command State InstanceId
-- ---- ------- ----- ----------
1 Job1 start-service schedule Running 05abb67a-2932-4bd5-b331-c0254b8d9146
3 Job3 start-service schedule Running c03cbd45-19f3-4558-ba94-ebe41b68ad03
5 Job5 get-service s* Blocked e3bbfed1-9c53-401a-a2c3-a8db34336adf
C:\PS> stop-job -instanceid e3bbfed1-9c53-401a-a2c3-a8db34336adf
描述
-----------
這些命令示範如何依據執行個體識別碼來停止工作。
第一個命令會使用 Get-Job 命令取得目前工作階段中的工作。這個命令會使用管線運算子 (|) 將工作傳送到 Format-Table,該命令會顯示一份表格,列出每項工作的指定屬性。表格中包含每一項工作的執行個體識別碼。它會使用計算屬性來顯示工作狀態。
第二個命令會使用 Stop-Job 命令搭配 InstanceID 參數,停止所選取的工作。
範例 8
C:\PS>$j = invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob
C:\PS> $j | stop-job -passthru
Id Name State HasMoreData Location Command
-- ---- ---- ----------- -------- -------
5 Job5 Stopped True judithh-tablet get-eventlog system
描述
-----------
在這個範例中,會示範如何使用 Stop-Job Cmdlet 停止正在遠端電腦執行的工作。
因為該工作是使用 Invoke-Command 的 AsJob 參數啟動,所以即使工作是在遠端電腦執行,工作物件仍然位於本機電腦。因此,您可以使用本機 Stop-Job 命令停止工作。
第一個命令會使用 Invoke-Command Cmdlet,在 Server01 電腦上啟動背景工作。這個命令會使用 AsJob 參數,將遠端命令當做背景工作來執行,
這個命令會傳回工作物件 (與 Start-Job 傳回的工作物件相同),再將工作物件儲存在 $j 變數中。
第二個命令會使用管線運算子,將 $j 變數中的工作傳送到 Stop-Job。這個命令會使用 PassThru 參數來指示 Stop-Job 傳回工作物件。工作物件顯示確認工作的 State 屬性值是 "Stopped"。
如需遠端背景工作的詳細資訊,請參閱 about_Remote_Jobs。
請參閱
概念
about_Jobs
about_Job_Details
about_remote_jobs
Start-Job
Get-Job
Receive-Job
Wait-Job
Remove-Job
Invoke-Command