共用方式為


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