Stop-Job
停止 PowerShell 背景工作。
Syntax
Stop-Job
[-PassThru]
[-Id] <Int32[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-Job] <Job[]>
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-PassThru]
[-Name] <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-PassThru]
[-InstanceId] <Guid[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-PassThru]
[-State] <JobState>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-PassThru]
[-Filter] <Hashtable>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Cmdlet Stop-Job
會停止進行中的PowerShell背景工作。 您可以使用此 Cmdlet 來停止所有作業,或根據其名稱、識別碼、實例識別碼或狀態來停止選取的作業,或將作業物件傳遞至 Stop-Job
。
您可以使用 Stop-Job
來停止背景工作,例如使用任何 Cmdlet 的 Cmdlet 或 AsJob 參數啟動Start-Job
的背景工作。 當您停止背景作業時,PowerShell 會完成該作業佇列中擱置的所有工作,然後結束作業。 在送出這個命令之後,就不會再新增任何新工作到佇列中。
此 Cmdlet 不會刪除背景工作。 若要刪除作業,請使用 Remove-Job
Cmdlet。
從 Windows PowerShell 3.0 開始,Stop-Job
也會停止自定義作業類型,例如工作流程作業和排程工作的實例。 若要啟用 Stop-Job
以自定義作業類型停止作業,請在執行 Stop-Job
命令之前,先將支援自定義作業類型的模組匯入會話,方法是使用 Import-Module
Cmdlet 或使用 或 取得模組中的 Cmdlet。 如需有關特定自訂工作類型的資訊,請參閱自訂工作類型功能的文件。
範例
範例 1︰使用 Invoke-Command 停止遠端電腦上的工作
$s = New-PSSession -ComputerName Server01 -Credential Domain01\Admin02
$j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
Invoke-Command -Session $s -ScriptBlock { Stop-job -Job $Using:j }
此範例示範如何使用 Stop-Job
Cmdlet 來停止在遠端電腦上執行的作業。
因為作業是使用 Invoke-Command
Cmdlet 從遠端執行 Start-Job
命令而啟動的,所以作業物件會儲存在遠端電腦上。 您必須使用另一個Invoke-Command
Stop-Job
命令從遠端執行命令。 如需有關遠端背景工作的詳細資訊,請參閱 about_Remote_Jobs。
第一個命令會在 Server01 計算機上建立 PowerShell 工作階段 (PSSession) ,然後將會話物件儲存在變數中 $s
。 命令使用網域系統管理員的認證。
第二個Start-Job
命令會Invoke-Command
使用 Cmdlet 在工作階段中執行命令。 工作中的命令取得 System 事件記錄檔中的所有事件。 產生的作業物件會儲存在變數中 $j
。
第三個命令停止工作。 它會使用 Invoke-Command
Cmdlet 在 Server01 上的 PSSession 中執行Stop-Job
命令。 由於作業物件儲存在 $j
中,這是本機計算機上的變數,所以命令會使用Using scope 修飾詞來識別 $j
為局部變數。
如需使用範圍修飾詞的詳細資訊,請參閱 about_Remote_Variables。
當命令完成時,作業會停止,而 中的 $s
PSSession 可供使用。
範例 2︰停止背景工作
Stop-Job -Name "Job1"
此命令停止 Job1 背景工作。
範例 3︰停止幾個背景工作
Stop-Job -Id 1, 3, 4
此命令停止三個工作。 它會依其識別碼來識別它們。
範例 4︰停止所有背景工作
Get-Job | Stop-Job
此命令停止目前工作階段中的所有背景工作。
範例 5︰停止所有已封鎖的背景工作
Stop-Job -State Blocked
此命令停止所有已封鎖的工作。
範例 6︰使用執行個體識別碼停止工作
Get-Job | Format-Table ID, Name, Command, @{Label="State";Expression={$_.JobStateInfo.State}},
InstanceID -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
Stop-Job -InstanceId e3bbfed1-9c53-401a-a2c3-a8db34336adf
這些命令示範如何根據工作的執行個體識別碼來停止工作。
第一個命令會 Get-Job
使用 Cmdlet 來取得目前工作階段中的作業。 此命令會使用管線運算符 (|
) 將作業傳送至 Format-Table
命令,其中會顯示每個作業指定屬性的數據表。 此表格包含每個工作的執行個體識別碼。 它使用計算的屬性來顯示工作狀態。
第二個 Stop-Job
命令會使用具有 InstanceID 參數的命令來停止選取的作業。
範例 7︰停止遠端電腦上的工作
$j = Invoke-Command -ComputerName Server01 -ScriptBlock {Get-EventLog System} -AsJob
$j | Stop-Job -PassThru
Id Name State HasMoreData Location Command
-- ---- ---- ----------- -------- -------
5 Job5 Stopped True user01-tablet get-eventlog system
此範例示範如何使用 Stop-Job
Cmdlet 來停止在遠端電腦上執行的作業。
因為作業是使用 Cmdlet 的 Invoke-Command
AsJob 參數啟動,所以作業對象位於本機電腦上,即使作業是在遠端電腦上執行也一樣。 因此,您可以使用本機 Stop-Job
命令來停止作業。
第一個命令會 Invoke-Command
使用 Cmdlet 在 Server01 計算機上啟動背景作業。 命令使用 AsJob 參數將遠端命令當作背景工作來執行。
此命令會傳回作業物件,此物件與 Cmdlet 傳回的作業物件 Start-Job
相同。
此命令會將作業物件儲存在變數中 $j
。
第二個命令會使用管線運算子將變數中的 $j
作業傳送至 Stop-Job
。 此命令會使用 PassThru 參數直接 Stop-Job
傳回作業物件。 工作物件顯示會確認工作的狀態為 Stopped。
如需有關遠端背景工作的詳細資訊,請參閱 about_Remote_Jobs。
參數
-Confirm
在執行 Cmdlet 前提示您確認。
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Filter
指定條件的雜湊表。 此 Cmdlet 會停止符合所有條件的工作。 輸入索引鍵為工作屬性且值為工作屬性值的雜湊表。
這個參數只適用於自訂工作類型,例如,工作流程工作和已排程的工作。 它不適用於標準背景工作,例如使用 Start-Job
Cmdlet 所建立的背景工作。 如需支援此參數的詳細資訊,請參閱工作類型的說明主題。
此參數是在 Windows PowerShell 3.0 引進。
Type: | Hashtable |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Id
指定此 Cmdlet 停止之工作的識別碼。 預設為目前工作階段中的所有工作。
識別碼是一個整數,可唯一識別目前工作階段中的工作。 與執行個體識別碼相比,它比較容易記住並輸入,但是它只有在目前的工作階段內是唯一的。 您可以輸入一個或多個識別碼,以逗號分隔。 若要尋找工作的識別碼,請輸入 Get-Job
。
Type: | Int32[] |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
指定此 Cmdlet 停止之工作的執行個體識別碼。 預設為所有工作。
執行個體識別碼是 GUID,可唯一識別電腦上的工作。 若要尋找作業的實體識別碼,請使用 Get-Job
。
Type: | Guid[] |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
指定此 Cmdlet 停止的工作。 輸入包含工作的變數,或輸入可取得工作的命令。 您也可以使用管線運算符將作業提交至 Stop-Job
Cmdlet。 根據預設, Stop-Job
刪除目前會話中啟動的所有作業。
Type: | Job[] |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
指定此 Cmdlet 停止之工作的好記名稱。 請以逗號分隔的清單方式輸入工作名稱,或使用萬用字元 (*) 來輸入工作名稱模式。 根據預設, Stop-Job
會停止在目前會話中建立的所有作業。
因為易記名稱不保證是唯一的,所以依名稱停止作業時,請使用 WhatIf 和 Confirm 參數。
Type: | String[] |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-PassThru
傳回代表您正在使用之項目的物件。 根據預設,此 Cmdlet 不會產生任何輸出。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-State
指定工作狀態。 此 Cmdlet 只停止處於指定狀態的工作。 此參數可接受的值為:
- NotStarted
- 執行中
- Completed
- 失敗
- 已停止
- 封鎖
- 暫止
- 已中斷連接
- Suspending
- 停止中
如需作業狀態的詳細資訊,請參閱 JobState 列舉。
Type: | JobState |
Accepted values: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-WhatIf
顯示執行 Cmdlet 後會發生的情況。 Cmdlet 並不會執行。
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
輸入
System.Management.Automation.RemotingJob
您可以使用管線將工作物件傳送至此 Cmdlet。
輸出
None, System.Management.Automation.PSRemotingJob
如果您指定 PassThru 參數,此 Cmdlet 會傳回工作物件。 否則,此 Cmdlet 不會產生任何輸出。